' .'
'.&mt('Please either [_1]continue the current session[_2] or [_3]log out[_4].' ,'','','','') .'
' @@ -274,7 +285,8 @@ sub handler { my $tmpinfo=Apache::lonnet::reply('tmpget:'.$form{'logtoken'}, $form{'serverid'}); - if (($tmpinfo=~/^error/) || ($tmpinfo eq 'con_lost')) { + if (($tmpinfo=~/^error/) || ($tmpinfo eq 'con_lost') || + ($tmpinfo eq 'no_such_host')) { &failed($r,'Information needed to verify your login information is missing, inaccessible or expired.',\%form); return OK; } else { @@ -328,21 +340,15 @@ sub handler { } # ---------------------------------------------------------------- Authenticate - my @cancreate; + my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$form{'udom'}); - if (ref($domconfig{'usercreation'}) eq 'HASH') { - if (ref($domconfig{'usercreation'}{'cancreate'}) eq 'HASH') { - if (ref($domconfig{'usercreation'}{'cancreate'}{'selfcreate'}) eq 'ARRAY') { - @cancreate = @{$domconfig{'usercreation'}{'cancreate'}{'selfcreate'}}; - } elsif (($domconfig{'usercreation'}{'cancreate'}{'selfcreate'} ne 'none') && - ($domconfig{'usercreation'}{'cancreate'}{'selfcreate'} ne '')) { - @cancreate = ($domconfig{'usercreation'}{'cancreate'}{'selfcreate'}); - } - } - } + my ($cancreate,$statustocreate) = + &Apache::createaccount::get_creation_controls($form{'udom'},$domconfig{'usercreation'}); my $defaultauth; - if (grep(/^login$/,@cancreate)) { - $defaultauth = 1; + if (ref($cancreate) eq 'ARRAY') { + if (grep(/^login$/,@{$cancreate})) { + $defaultauth = 1; + } } my $clientcancheckhost = 1; my $authhost=Apache::lonnet::authenticate($form{'uname'},$upass, @@ -356,24 +362,25 @@ sub handler { \%form); return OK; } elsif ($authhost eq 'no_account_on_host') { - my %domconfig = - &Apache::lonnet::get_dom('configuration',['usercreation'],$form{'udom'}); - if (grep(/^login$/,@cancreate)) { + if ($defaultauth) { my $domdesc = &Apache::lonnet::domain($form{'udom'},'description'); unless (&check_can_host($r,\%form,'no_account_on_host',$domdesc)) { return OK; } my $start_page = - &Apache::loncommon::start_page('Create a user account in LON-CAPA'); + &Apache::loncommon::start_page('Create a user account in LON-CAPA', + '',{'no_inline_link' => 1,}); my $lonhost = $r->dir_config('lonHostID'); my $origmail = $Apache::lonnet::perlvar{'lonSupportEMail'}; my $contacts = &Apache::loncommon::build_recipient_list(undef,'helpdeskmail', $form{'udom'},$origmail); my ($contact_email) = split(',',$contacts); - my $output = &Apache::createaccount::username_check($form{'uname'}, - $form{'udom'},$domdesc,'', - $lonhost,$contact_email,$contact_name); + my $output = + &Apache::createaccount::username_check($form{'uname'},$form{'udom'}, + $domdesc,'',$lonhost, + $contact_email,$contact_name, + undef,$statustocreate); &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; &Apache::createaccount::print_header($r,$start_page); @@ -414,17 +421,34 @@ sub handler { } } - unless (&check_can_host($r,\%form,$authhost)) { - return OK; - } + my ($is_balancer,$otherserver) = + &Apache::lonnet::check_loadbalancing($form{'uname'},$form{'udom'}); - if ($r->dir_config("lonBalancer") eq 'yes') { - &success($r,$form{'uname'},$form{'udom'},$authhost,'noredirect',undef, - \%form); - my $otherserver = &Apache::lonnet::spareserver(30000,undef,1,$form{'udom'}); - $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver.'&origurl='.$firsturl); + if ($is_balancer) { + if (!$otherserver) { + ($otherserver) = &Apache::lonnet::choose_server($form{'udom'}); + } + if ($otherserver) { + &success($r,$form{'uname'},$form{'udom'},$authhost,'noredirect',undef, + \%form); + $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver.'&origurl='.$firsturl); + } else { + $r->print(&noswitch()); + } return OK; } else { + if (!&check_can_host($r,\%form,$authhost)) { + my ($otherserver) = &Apache::lonnet::choose_server($form{'udom'}); + if ($otherserver) { + &success($r,$form{'uname'},$form{'udom'},$authhost,'noredirect',undef, + \%form); + $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver.'&origurl='.$firsturl); + } else { + $r->print(&noswitch()); + } + return OK; + } + # ------------------------------------------------------- Do the load balancing # ---------------------------------------------------------- Determine own load @@ -441,6 +465,9 @@ sub handler { # ---------------------------------------------------------- Are we overloaded? if ((($userloadpercent>100.0)||($loadpercent>100.0))) { my $unloaded=Apache::lonnet::spareserver($loadpercent,$userloadpercent,1,$form{'udom'}); + if (!$unloaded) { + ($unloaded) = &Apache::lonnet::choose_server($form{'udom'}); + } if ($unloaded) { &success($r,$form{'uname'},$form{'udom'},$authhost,'noredirect', undef,\%form); @@ -486,7 +513,9 @@ sub check_can_host { } unless ($canhost) { if ($authhost eq 'no_account_on_host') { - my ($login_host,$hostname) = &Apache::lonnet::choose_server($udom); + my $checkloginvia = 1; + my ($login_host,$hostname) = + &Apache::lonnet::choose_server($udom,$checkloginvia); &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; if ($login_host ne '') { @@ -516,6 +545,15 @@ sub check_can_host { return $canhost; } +sub noswitch { + my $result = &Apache::loncommon::start_page('Access to LON-CAPA unavailable'). + ''.&mt('Currently no other LON-CAPA server is available to host your session either.').'
'. + &Apache::loncommon::end_page(); + return $result; +} + 1; __END__