Diff for /loncom/interface/createaccount.pm between versions 1.15 and 1.28

version 1.15, 2008/07/10 00:18:05 version 1.28, 2009/02/07 00:59:17
Line 52  sub handler { Line 52  sub handler {
     if ($r->header_only) {      if ($r->header_only) {
         return OK;          return OK;
     }      }
       
     my $domain;      my $domain;
   
     my $sso_username = $r->subprocess_env->get('REDIRECT_SSOUserUnknown');      my $sso_username = $r->subprocess_env->get('REDIRECT_SSOUserUnknown');
     my $sso_domain = $r->subprocess_env->get('REDIRECT_SSOUserDomain');      my $sso_domain = $r->subprocess_env->get('REDIRECT_SSOUserDomain');
   
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['token','courseid']);
       &Apache::lonacc::get_posted_cgi($r);
       &Apache::lonlocal::get_language_handle($r);
   
     if ($sso_username ne '' && $sso_domain ne '') {      if ($sso_username ne '' && $sso_domain ne '') {
         $domain = $sso_domain;           $domain = $sso_domain; 
     } else {       } else {
         $domain = &Apache::lonnet::default_login_domain();          $domain = &Apache::lonnet::default_login_domain();
           if (defined($env{'form.courseid'})) {
               if (&validate_course($env{'form.courseid'})) {
                   if ($env{'form.courseid'} =~ /^($match_domain)_($match_courseid)$/) {
                       $domain = $1; 
                   }
               }
           }
     }      }
     my $domdesc = &Apache::lonnet::domain($domain,'description');      my $domdesc = &Apache::lonnet::domain($domain,'description');
     my $contact_name = &mt('LON-CAPA helpdesk');      my $contact_name = &mt('LON-CAPA helpdesk');
Line 74  sub handler { Line 85  sub handler {
     my $include = $r->dir_config('lonIncludes');      my $include = $r->dir_config('lonIncludes');
     my $start_page;      my $start_page;
   
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['token','courseid']);  
     &Apache::lonacc::get_posted_cgi($r);  
     &Apache::lonlocal::get_language_handle($r);  
   
     my $handle = &Apache::lonnet::check_for_valid_session($r);      my $handle = &Apache::lonnet::check_for_valid_session($r);
     if ($handle ne '') {      if ($handle ne '') {
         $start_page =          $start_page =
Line 87  sub handler { Line 94  sub handler {
         $r->print($start_page."\n".'<h2>'.&mt('You are already logged in').'</h2>'.          $r->print($start_page."\n".'<h2>'.&mt('You are already logged in').'</h2>'.
                   '<p>'.&mt('Please either [_1]continue the current session[_2] or [_3]logout[_4].','<a href="/adm/roles">','</a>','<a href="/adm/logout">','</a>').                    '<p>'.&mt('Please either [_1]continue the current session[_2] or [_3]logout[_4].','<a href="/adm/roles">','</a>','<a href="/adm/logout">','</a>').
                   '</p><p><a href="/adm/loginproblems.html">'.&mt('Login problems?').'</a></p>'.$end_page);                    '</p><p><a href="/adm/loginproblems.html">'.&mt('Login problems?').'</a></p>'.$end_page);
        return OK;          return OK;
     }      }
     $start_page =  
         &Apache::loncommon::start_page('Create a user account in LON-CAPA','',      my ($js,$courseid,$title);
                                        {'no_inline_link'   => 1,});      if (defined($env{'form.courseid'})) {
     if ($env{'form.phase'} eq 'username_activation') {          $courseid = &validate_course($env{'form.courseid'});
       }
       if ($courseid ne '') {
           $js = &catreturn_js();
           $title = 'Self-enroll in a LON-CAPA course';
       } else {
           $title = 'Create a user account in LON-CAPA';
       }
       if ($env{'form.phase'} eq 'selfenroll_login') {
           $title = 'Self-enroll in a LON-CAPA course';
         if ($env{'form.udom'} ne '') {          if ($env{'form.udom'} ne '') {
             $domain = $env{'form.udom'};              $domain = $env{'form.udom'};
         }          }
           my ($result,$output) =
               &username_validation($r,$env{'form.uname'},$domain,$domdesc,
                                    $contact_name,$contact_email,$courseid,
                                    $lonhost);
           if ($result eq 'existingaccount') {
               $r->print($output);
               &print_footer($r);
               return OK;
           } else {
               $start_page = 
                   &Apache::loncommon::start_page($title,$js,
                                                  {'no_inline_link'   => 1,});
               &print_header($r,$start_page,$courseid);
               $r->print($output);
               &print_footer($r);    
               return OK;
           }
     }      }
       $start_page =
           &Apache::loncommon::start_page($title,$js,
                                          {'no_inline_link'   => 1,});
     my @cancreate;      my @cancreate;
     my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$domain);      my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$domain);
     if (ref($domconfig{'usercreation'}) eq 'HASH') {      if (ref($domconfig{'usercreation'}) eq 'HASH') {
Line 111  sub handler { Line 147  sub handler {
     }      }
   
     if (@cancreate == 0) {      if (@cancreate == 0) {
         &print_header($r,$start_page);          &print_header($r,$start_page,$courseid);
         my $output = '<h3>'.&mt('Account creation unavailable').'</h3>'.          my $output = '<h3>'.&mt('Account creation unavailable').'</h3>'.
                      '<span class="LC_warning">'.                       '<span class="LC_warning">'.
                      &mt('Creation of a new user account using an e-mail address or an institutional log-in ID as username is not permitted in the domain: [_1] ([_2]).',$domain,$domdesc).'</span><br /><br />';                       &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).'</span><br /><br />';
         $r->print($output);          $r->print($output);
         $r->print(&Apache::loncommon::end_page());          &print_footer($r);
         return OK;          return OK;
     }      }
   
     my $courseid;  
     if (defined($env{'form.courseid'})) {  
         $courseid = &validate_course($env{'form.courseid'});  
     }  
   
     if ($sso_username ne '') {      if ($sso_username ne '') {
         &print_header($r,$start_page);          &print_header($r,$start_page,$courseid);
         my ($output,$msg);          my ($msg,$sso_logout);
           $sso_logout = &sso_logout_frag($r,$domain);
         if (grep(/^sso$/,@cancreate)) {          if (grep(/^sso$/,@cancreate)) {
             $msg = '<h3>'.&mt('Account creation').'</h3>'.              $msg = '<h3>'.&mt('Account creation').'</h3>'.
                    &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 in this domain.").'<br /><br />';                     &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.").'<br />';
             ($output, my $checkfail) = &username_check($sso_username,$domain,  
                                                        $domdesc,$courseid,              $msg .= &username_check($sso_username,$domain,$domdesc,$courseid, 
                                                        $lonhost,$contact_email);                                      $lonhost,$contact_email,$contact_name,$sso_logout);
             if ($checkfail) {  
                 $msg .= '<h4>'.&mt('Account creation unavailable');'</h4>';  
                 if ($checkfail eq 'username') {  
                     $msg .= '<span class="LC_warning">'.  
                             &mt('A LON-CAPA account may not be created with the username you use.').'</span>';  
                 } elsif ($checkfail eq 'authtoken') {  
                     $msg .= '<span class="LC_error">'.&mt('Error creating token.').'</span>';  
                 }  
                 $msg .= '<br /><br />'.  
                         &mt('Please contact the [_1] ([_2]) for assistance.',$contact_name,$contact_email);  
             } 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.');  
             }  
         } else {          } else {
             $msg .= '<h3>'.&mt('Account creation unavailable').'</h3>'.              $msg = '<h3>'.&mt('Account creation unavailable').'</h3>'.
                     '<span class="LC_warning">'.&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 in this domain, and you are not permitted to create one.").'</span><br /><br />'.&mt('Please contact the [_1] ([_2]) for assistance.',$contact_name,$contact_email);                     '<span class="LC_warning">'.&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.").'</span><br /><br />'.&mt('Please contact the [_1] ([_2]) for assistance.',$contact_name,$contact_email).'<hr />'.
                      $sso_logout;
         }          }
         $r->print($msg.'<br />'.$output);          $r->print($msg);
         $r->print(&Apache::loncommon::end_page());          &print_footer($r);
         return OK;          return OK;
     }      }
   
Line 167  sub handler { Line 187  sub handler {
                 return OK;                  return OK;
             } else {              } else {
                 $r->print($output);                  $r->print($output);
                 $r->print(&Apache::loncommon::end_page());                  &print_footer($r);
                 return OK;                  return OK;
             }              }
         } else {          } else {
             &print_header($r,$start_page);              &print_header($r,$start_page,$courseid);
             $r->print($output);              $r->print($output);
             $r->print(&Apache::loncommon::end_page());              &print_footer($r);
             return OK;              return OK;
         }          }
     }      }
Line 187  sub handler { Line 207  sub handler {
                 return OK;                  return OK;
             }              }
         }          }
         &print_header($r,$start_page);          &print_header($r,$start_page,$courseid);
         $r->print($output);          $r->print($output);
         $r->print(&Apache::loncommon::end_page());          &print_footer($r);
         return OK;          return OK;
     }      } elsif ($env{'form.phase'} eq 'username_validation') { 
           (my $result,$output) = 
     &print_header($r,$start_page);              &username_validation($r,$env{'form.uname'},$domain,$domdesc,
     if ($env{'form.create_with_email'}) {                                   $contact_name,$contact_email,$courseid,
                                    $lonhost);
           if ($result eq 'existingaccount') {
               $r->print($output);
               &print_footer($r);
               return OK;
           } else {
               &print_header($r,$start_page,$courseid);
           }
       } elsif ($env{'form.create_with_email'}) {
           &print_header($r,$start_page,$courseid);
         $output = &process_email_request($env{'form.useremail'},$domain,$domdesc,          $output = &process_email_request($env{'form.useremail'},$domain,$domdesc,
                                          $contact_name,$contact_email,\@cancreate,                                           $contact_name,$contact_email,\@cancreate,
                                          $lonhost,$domconfig{'usercreation'},                                           $lonhost,$domconfig{'usercreation'},
                                          $courseid);                                           $courseid);
     } elsif ($env{'form.phase'} eq 'username_validation') {  
         $output = &username_validation($env{'form.uname'},$domain,$domdesc,  
                                        $contact_name,$contact_email,$courseid,  
                                        $lonhost);  
     } elsif (!$token) {      } elsif (!$token) {
           &print_header($r,$start_page,$courseid);
         my $now=time;          my $now=time;
         if (grep(/^login$/,@cancreate)) {          if (grep(/^login$/,@cancreate)) {
             my $jsh=Apache::File->new($include."/londes.js");              my $jsh=Apache::File->new($include."/londes.js");
Line 214  sub handler { Line 241  sub handler {
             $r->print(&javascript_validmail());              $r->print(&javascript_validmail());
         }          }
         $output = &print_username_form($domain,$domdesc,\@cancreate,$now,$lonhost,          $output = &print_username_form($domain,$domdesc,\@cancreate,$now,$lonhost,
                                        $courseid);                                          $courseid);
     }      }
     $r->print($output);      $r->print($output);
     $r->print(&Apache::loncommon::end_page());      &print_footer($r);
     return OK;      return OK;
 }  }
   
 sub print_header {  sub print_header {
     my ($r,$start_page) = @_;      my ($r,$start_page,$courseid) = @_;
     $r->print($start_page);      $r->print($start_page);
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
       if ($courseid ne '') {
           my %coursehash = &Apache::lonnet::coursedescription($courseid);
           &selfenroll_crumbs($r,$courseid,$coursehash{'description'});
       }
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
     ({href=>"/adm/createuser",      ({href=>"/adm/createuser",
       text=>"New username"});        text=>"New username"});
Line 232  sub print_header { Line 263  sub print_header {
     return;      return;
 }  }
   
   sub print_footer {
       my ($r) = @_;
       if ($env{'form.courseid'} ne '') {
           $r->print('<form name="backupcrumbs" method="post" action="">'.
                     &Apache::lonhtmlcommon::echo_form_input(['backto','logtoken',
                         'token','serverid','uname','upass','phase','create_with_email',
                         'code','useremail','crypt','cfirstname','clastname',
                         'cmiddlename','cgeneration','cpermanentemail','cid']).
                     '</form>');
       }
       $r->print(&Apache::loncommon::end_page());
   }
   
   sub selfenroll_crumbs {
       my ($r,$courseid,$desc) = @_;
       &Apache::lonhtmlcommon::add_breadcrumb
            ({href=>"javascript:ToCatalog('backupcrumbs','')",
              text=>"Course Catalog"});
       if ($env{'form.coursenum'} ne '') {
           &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>"javascript:ToCatalog('backupcrumbs','details')",
               text=>"Course details"});
       }
       my $last_crumb;
       if ($desc ne '') {
           $last_crumb = &mt('Self-enroll in [_1]','<span class="LC_cusr_emph">'.$desc.'</span>');
       } else {
           $last_crumb = &mt('Self-enroll');
       }
       &Apache::lonhtmlcommon::add_breadcrumb
                      ({href=>"javascript:ToSelfenroll('backupcrumbs')",
                        text=>$last_crumb,
                        no_mt=>"1"});
       return;
   }
   
 sub validate_course {  sub validate_course {
     my ($courseid) = @_;      my ($courseid) = @_;
     my ($cdom,$cnum) = ($courseid =~ /^($match_domain)_($match_courseid)$/);      my ($cdom,$cnum) = ($courseid =~ /^($match_domain)_($match_courseid)$/);
Line 321  sub print_username_form { Line 388  sub print_username_form {
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                                          unam => 'username',                                           unam => 'username',
                                          udom => 'domain',                                           udom => 'domain',
                                          uemail => 'Email address in LON-CAPA',                                           uemail => 'E-mail address in LON-CAPA',
                                          proc => 'Proceed');                                           proc => 'Proceed');
     my $output;      my $output;
     if (ref($cancreate) eq 'ARRAY') {      if (ref($cancreate) eq 'ARRAY') {
         if (grep(/^login$/,@{$cancreate})) {          if (grep(/^login$/,@{$cancreate})) {
             my %domdefaults = &Apache::lonnet::get_domain_defaults($domain);              my %domdefaults = &Apache::lonnet::get_domain_defaults($domain);
             if ((($domdefaults{'auth_def'} =~/^krb/) && ($domdefaults{'auth_arg_def'} ne '')) || ($domdefaults{'auth_def'} eq 'localauth')) {              if ((($domdefaults{'auth_def'} =~/^krb/) && ($domdefaults{'auth_arg_def'} ne '')) || ($domdefaults{'auth_def'} eq 'localauth')) {
                 $output = '<div class="LC_left_float"><h3>'.&mt('Create account with a username provided by your institution').'</h3>';                  $output = '<div class="LC_left_float"><h3>'.&mt('Create account with a username provided by this institution').'</h3>';
                 $output .= &mt('If you already have a log-in ID at your institution,[_1] you may be able to use it for LON-CAPA.','<br />').'<br /><br />'.&mt('Type in your log-in ID and password to find out.').'<br /><br />';  
                 my ($lkey,$ukey) = &Apache::lonpreferences::des_keys();  
                 my ($lextkey,$uextkey) = &getkeys($lkey,$ukey);  
                 my $logtoken=Apache::lonnet::reply('tmpput:'.$ukey.$lkey.'&createaccount',  
                                                    $lonhost);  
                 $output .= &serverform($logtoken,$lonhost,undef,$courseid);  
                 my $unameform = '<input type="text" name="uname" size="10" value="" />';  
                 my $upassform = '<input type="password" name="upass'.$now.'" size="10" />';  
                 my $submit_text = &mt('Create LON-CAPA account');                  my $submit_text = &mt('Create LON-CAPA account');
                 $output .= '<form name="client" method="post" action="/adm/createaccount">'."\n".                   $output .= &mt('If you already have a log-in ID at this institution,[_1] you may be able to use it for LON-CAPA.','<br />').'<br /><br />'.&mt('Type in your log-in ID and password to find out.').'<br /><br />';
                            &Apache::lonhtmlcommon::start_pick_box()."\n".                  $output .= &login_box($now,$lonhost,$courseid,$submit_text,
                            &Apache::lonhtmlcommon::row_title(&mt('Log-in ID'),                                        $domain,'createaccount').'</div>';
                                                         'LC_pick_box_title')."\n".  
                            $unameform."\n".  
                            &Apache::lonhtmlcommon::row_closure(1)."\n".  
                            &Apache::lonhtmlcommon::row_title(&mt('Password'),  
                                                         'LC_pick_box_title')."\n".  
                            $upassform."\n".'<br /><br />'."\n".  
                            '<input type="button" name="username_validation" value="'.  
                            $submit_text.'" onclick="javascript:send()" />'."\n".   
                            &Apache::lonhtmlcommon::row_closure(1)."\n".  
                            &Apache::lonhtmlcommon::end_pick_box().'<br /><br />'."\n".  
                            '<input type="hidden" name="lextkey" value="'.$lextkey.'">'."\n".  
                            '<input type="hidden" name="uextkey" value="'.$uextkey.'">'."\n".  
                            '</form></div>';  
             }              }
         }          }
         if (grep(/^email$/,@{$cancreate})) {          if (grep(/^email$/,@{$cancreate})) {
             $output .= '<div class="LC_left_float"><h3>'.&mt('Create account with an e-mail address as your username').'</h3>';              $output .= '<div class="LC_left_float"><h3>'.&mt('Create account with an e-mail address as your username').'</h3>';
             if (grep(/^login$/,@{$cancreate})) {  
                 $output .= &mt('Provide your e-mail address to request a LON-CAPA account,[_1] if you do not have a log-in ID at your institution.','<br />').'<br /><br />';  
             } else {  
                 $output .= '<br />';  
             }  
             my $emailform = '<input type="text" name="useremail" size="25" value="" />';  
             my $captchaform = &create_captcha();              my $captchaform = &create_captcha();
             my $submit_text = &mt('Request LON-CAPA account');              if ($captchaform) {
             $output .=  '<form name="createaccount" method="post" onSubmit="return validate_email()" action="/adm/createaccount">'.                  my $submit_text = &mt('Request LON-CAPA account');
                         &Apache::lonhtmlcommon::start_pick_box()."\n".                  my $emailform = '<input type="text" name="useremail" size="25" value="" />';
                         &Apache::lonhtmlcommon::row_title(&mt('E-mail address'),                  if (grep(/^login$/,@{$cancreate})) {
                                                          'LC_pick_box_title')."\n".                      $output .= &mt('Provide your e-mail address to request a LON-CAPA account,[_1] if you do not have a log-in ID at your institution.','<br />').'<br /><br />';
                         $emailform."\n".                  } else {
                         &Apache::lonhtmlcommon::row_closure(1).                      $output .= '<br />';
                         &Apache::lonhtmlcommon::row_title(&mt('Validation'),                  }
                                                          'LC_pick_box_title')."\n".                  $output .=  '<form name="createaccount" method="post" onSubmit="return validate_email()" action="/adm/createaccount">'.
                         $captchaform."\n".'<br /><br />';                              &Apache::lonhtmlcommon::start_pick_box()."\n".
             if ($courseid ne '') {                              &Apache::lonhtmlcommon::row_title(&mt('E-mail address'),
                 $output .= '<input type="hidden" name="courseid" value="'.$courseid.'"/>'."\n";                                                                'LC_pick_box_title')."\n".
                               $emailform."\n".
                               &Apache::lonhtmlcommon::row_closure(1).
                               &Apache::lonhtmlcommon::row_title(&mt('Validation'),
                                                                'LC_pick_box_title')."\n".
                               $captchaform."\n".'<br /><br />';
                   if ($courseid ne '') {
                       $output .= '<input type="hidden" name="courseid" value="'.$courseid.'"/>'."\n"; 
                   }
                   $output .= '<input type="submit" name="create_with_email" value="'. 
                               $submit_text.'" />'.
                               &Apache::lonhtmlcommon::row_closure(1).
                               &Apache::lonhtmlcommon::end_pick_box().'<br /><br />';
                   if ($courseid ne '') {
                       $output .= &Apache::lonhtmlcommon::echo_form_input(['courseid']);
                   }
                   $output .= '</form>';
               } else {
                   my $helpdesk = '/adm/helpdesk?origurl=%2fadm%2fcreateaccount';
                   if ($courseid ne '') {
                       $helpdesk .= '&courseid='.$courseid;
                   }
                   $output .= '<span class="LC_error">'.&mt('An error occurred generating the validation code[_1] required for an e-mail address to be used as username.','<br />').'</span><br /><br />'.&mt('[_1]Contact the helpdesk[_2] or [_3]reload[_2] the page and try again.','<a href="'.$helpdesk.'">','</a>','<a href="javascript:window.location.reload()">');
             }              }
             $output .= '<input type="submit" name="create_with_email" value="'.               $output .= '</div>';
                         $submit_text.'" />'.  
                         &Apache::lonhtmlcommon::row_closure(1).  
                         &Apache::lonhtmlcommon::end_pick_box().'<br /><br /></form>'.  
                         '</div>';  
         }          }
     }      }
     if ($output eq '') {      if ($output eq '') {
         $output = &mt('Creation of a new user account using an e-mail address or an institutional log-in ID as your username is not permitted in the domain: [_1] ([_2])',$domain,$domdesc);          $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);
     } else {      } else {
         $output .= '<div class="LC_clear_float_footer"></div>';          $output .= '<div class="LC_clear_float_footer"></div>';
     }      }
     return $output;      return $output;
 }  }
   
   sub login_box {
       my ($now,$lonhost,$courseid,$submit_text,$domain,$context) = @_;
       my $output;
       my %titles = &Apache::lonlocal::texthash(
                                                 createaccount => 'Log-in ID',
                                                 selfenroll    => 'Username',
                                               );
       my ($lkey,$ukey) = &Apache::lonpreferences::des_keys();
       my ($lextkey,$uextkey) = &getkeys($lkey,$ukey);
       my $logtoken=Apache::lonnet::reply('tmpput:'.$ukey.$lkey.'&createaccount',
                                          $lonhost);
       $output = &serverform($logtoken,$lonhost,undef,$courseid,$context);
       my $unameform = '<input type="text" name="uname" size="10" value="" />';
       my $upassform = '<input type="password" name="upass'.$now.'" size="10" />';
       $output .= '<form name="client" method="post" action="/adm/createaccount">'."\n".
                  &Apache::lonhtmlcommon::start_pick_box()."\n";
       if ($context eq 'selfenroll') {
           my $udomform =  '<input type="text" name="udom" size="10" value="'.
                           $domain.'" />';
           $output .= &Apache::lonhtmlcommon::row_title(&mt('Domain'),
                                                        'LC_pick_box_title')."\n".
                      $udomform."\n".
                      &Apache::lonhtmlcommon::row_closure(1)."\n";
       }
   
       $output .= &Apache::lonhtmlcommon::row_title($titles{$context},
                                                    'LC_pick_box_title')."\n".
                  $unameform."\n".
                  &Apache::lonhtmlcommon::row_closure(1)."\n".
                  &Apache::lonhtmlcommon::row_title(&mt('Password'),
                                                   'LC_pick_box_title')."\n".
                  $upassform."\n".'<br /><br />'."\n".
                  '<input type="button" name="username_validation" value="'.
                  $submit_text.'" onclick="javascript:send()" />'."\n".
                  &Apache::lonhtmlcommon::row_closure(1)."\n".
                  &Apache::lonhtmlcommon::end_pick_box().'<br /><br />'."\n".
                  '<input type="hidden" name="lextkey" value="'.$lextkey.'">'."\n".
                  '<input type="hidden" name="uextkey" value="'.$uextkey.'">'."\n".
                  '</form>';
       return $output;
   }
   
 sub process_email_request {  sub process_email_request {
     my ($useremail,$domain,$domdesc,$contact_name,$contact_email,$cancreate,      my ($useremail,$domain,$domdesc,$contact_name,$contact_email,$cancreate,
         $server,$settings,$courseid) = @_;          $server,$settings,$courseid) = @_;
     my $useremail = $env{'form.useremail'};      $useremail = $env{'form.useremail'};
     my $output;      my $output;
     if (ref($cancreate) eq 'ARRAY') {      if (ref($cancreate) eq 'ARRAY') {
         if (!grep(/^email$/,@{$cancreate})) {          if (!grep(/^email$/,@{$cancreate})) {
Line 433  sub process_email_request { Line 533  sub process_email_request {
                                              $contact_email,$captcha_hash{$captcha_chk});                                               $contact_email,$captcha_hash{$captcha_chk});
                     return $output;                      return $output;
                 }                  }
                 my (%rulematch,%inst_results,%curr_rules,%got_rules,%alerts);  
                 my $uhome=&Apache::lonnet::homeserver($useremail,$domain);                  my $uhome=&Apache::lonnet::homeserver($useremail,$domain);
                 if ($uhome eq 'no_host') {                  if ($uhome eq 'no_host') {
                     my $checkhash;                      my (%rulematch,%inst_results,%curr_rules,%got_rules,%alerts);
                     my $checks = { 'username' => 1 };                      &call_rulecheck($useremail,$domain,\%alerts,\%rulematch,
                     $checkhash->{$useremail.':'.$domain} = { 'newuser' => 1, };                                      \%inst_results,\%curr_rules,%got_rules,'username');
                     &Apache::loncommon::user_rule_check($checkhash,$checks,                      if (ref($alerts{'username'}) eq 'HASH') {
                           \%alerts,\%rulematch,\%inst_results,\%curr_rules,                          if (ref($alerts{'username'}{$domain}) eq 'HASH') {
                           \%got_rules);  
                     if (ref($alerts{'useremail'}) eq 'HASH') {  
                         if (ref($alerts{'useremail'}{$domain}) eq 'HASH') {  
                             if ($alerts{'username'}{$domain}{$useremail}) {                              if ($alerts{'username'}{$domain}{$useremail}) {
                                 $output = &invalid_state('userrules',$domdesc,                                  $output = &invalid_state('userrules',$domdesc,
                                                          $contact_name,$contact_email);                                                           $contact_name,$contact_email);
Line 468  sub process_email_request { Line 564  sub process_email_request {
     return $output;      return $output;
 }  }
   
   sub call_rulecheck {
       my ($uname,$udom,$alerts,$rulematch,$inst_results,$curr_rules,
           $got_rules,$tocheck) = @_;
       my ($checkhash,$checks);
       $checkhash->{$uname.':'.$udom} = { 'newuser' => 1, };
       if ($tocheck eq 'username') {
           $checks = { 'username' => 1 };
       }
       &Apache::loncommon::user_rule_check($checkhash,$checks,
              $alerts,$rulematch,$inst_results,$curr_rules,
              $got_rules);
       return;
   }
   
 sub send_token {  sub send_token {
     my ($domain,$email,$server,$domdesc,$contact_name,$contact_email,$courseid) = @_;      my ($domain,$email,$server,$domdesc,$contact_name,$contact_email,$courseid) = @_;
     my $msg = '<h3>'.&mt('Account creation status').'</h3>'.      my $msg = '<h3>'.&mt('Account creation status').'</h3>'.
Line 482  sub send_token { Line 592  sub send_token {
     my $token = &Apache::lonnet::tmpput(\%info,$server);      my $token = &Apache::lonnet::tmpput(\%info,$server);
     if ($token !~ /^error/ && $token ne 'no_such_host') {      if ($token !~ /^error/ && $token ne 'no_such_host') {
         my $esc_token = &escape($token);          my $esc_token = &escape($token);
         my $mailmsg = &mt('A request was submitted on [_1] for creation of a LON-CAPA account in the [_2] domain.',localtime(time),$domdesc).' '.          my $showtime = localtime(time);
              &mt('To complete this process please open a web browser and enter the following'          my $mailmsg = &mt('A request was submitted on [_1] for creation of a LON-CAPA account at the following institution: [_2].',$showtime,$domdesc).' '.
                 .' URL in the address/location box: [_1]'               &mt('To complete this process please open a web browser and enter the following URL in the address/location box: [_1]',
                 ,&Apache::lonnet::absolute_url().'/adm/createaccount?token='.$esc_token);                   &Apache::lonnet::absolute_url().'/adm/createaccount?token='.$esc_token);
         my $result = &Apache::resetpw::send_mail($domdesc,$email,$mailmsg,$contact_name,          my $result = &Apache::resetpw::send_mail($domdesc,$email,$mailmsg,$contact_name,
                                                  $contact_email);                                                   $contact_email);
         if ($result eq 'ok') {          if ($result eq 'ok') {
Line 524  sub process_mailtoken { Line 634  sub process_mailtoken {
                                                        $data{'username'},$domdesc);                                                         $data{'username'},$domdesc);
                 if ($result eq 'ok') {                  if ($result eq 'ok') {
                     $msg = $output;                       $msg = $output; 
                     my $shownow = localtime($now);                      my $shownow = &Apache::lonlocal::locallocaltime($now);
                     my $mailmsg = &mt('A LON-CAPA account in the [_1] domain has been created [_2] from IP address: [_3].  If you did not perform this action or authorize it, please contact the [_4] ([_5]).',$domdesc,$shownow,$ENV{'REMOTE_ADDR'},$contact_name,$contact_email)."\n";                      my $mailmsg = &mt('A LON-CAPA account for the institution: [_1] has been created [_2] from IP address: [_3].  If you did not perform this action or authorize it, please contact the [_4] ([_5]).',$domdesc,$shownow,$ENV{'REMOTE_ADDR'},$contact_name,$contact_email)."\n";
                     my $mailresult = &Apache::resetpw::send_mail($domdesc,$data{'email'},                      my $mailresult = &Apache::resetpw::send_mail($domdesc,$data{'email'},
                                                                  $mailmsg,$contact_name,                                                                   $mailmsg,$contact_name,
                                                                  $contact_email);                                                                   $contact_email);
Line 573  sub start_session { Line 683  sub start_session {
         $courseid = &validate_course($courseid);          $courseid = &validate_course($courseid);
         if ($courseid ne '') {          if ($courseid ne '') {
             $form{'courseid'} = $courseid;              $form{'courseid'} = $courseid;
             $firsturl = '/adm/selfenroll?cid='.$courseid;              $firsturl = '/adm/selfenroll?courseid='.$courseid;
         }          }
     }      }
     if ($r->dir_config('lonBalancer') eq 'yes') {      if ($r->dir_config('lonBalancer') eq 'yes') {
         &Apache::lonauth::success($r,$form{'uname'},$form{'udom'},          &Apache::lonauth::success($r,$form{'uname'},$form{'udom'},
                                   $lonhost,'noredirect',undef,\%form);                                    $lonhost,'noredirect',undef,\%form);
         my $delete = &Apache::lonnet::tmpdel($token);          if ($token ne '') { 
               my $delete = &Apache::lonnet::tmpdel($token);
           }
         $r->internal_redirect('/adm/switchserver');          $r->internal_redirect('/adm/switchserver');
     } else {      } else {
         &Apache::lonauth::success($r,$form{'uname'},$form{'udom'},          &Apache::lonauth::success($r,$form{'uname'},$form{'udom'},
Line 612  sub print_dataentry_form { Line 724  sub print_dataentry_form {
                     'lastname'       => "Last Name",                      'lastname'       => "Last Name",
                     'generation'     => "Generation",                      'generation'     => "Generation",
                     'permanentemail' => "Permanent e-mail address",                      'permanentemail' => "Permanent e-mail address",
                     'id'             => "ID/Student Number",                      'id'             => "Student/Employee ID",
                     'lg'             => "Login Data"                      'lg'             => "Login Data"
         );          );
         my %textboxsize = (          my %textboxsize = (
Line 693  sub create_account { Line 805  sub create_account {
                     &mt('Return to previous page').'</a>'.                      &mt('Return to previous page').'</a>'.
                     &Apache::loncommon::end_page();                      &Apache::loncommon::end_page();
     if ($retrieved eq 'ok') {      if ($retrieved eq 'ok') {
         if ($env{'form.cid'} ne '') {          if ($env{'form.courseid'} ne '') {
             my ($result,$userchkmsg) = &check_id($username,$domain,$domdesc);              my ($result,$userchkmsg) = &check_id($username,$domain,$domdesc);
             if ($result eq 'fail') {              if ($result eq 'fail') {
                 $output = $error.&mt('Invalid ID format').$end.                  $output = $error.&mt('Invalid ID format').$end.
Line 718  sub create_account { Line 830  sub create_account {
 }  }
   
 sub username_validation {  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);      my ($retrieved,$output,$upass);
   
     $username= &LONCAPA::clean_username($username);      $username= &LONCAPA::clean_username($username);
     $domain = &LONCAPA::clean_domain($domain);      $domain = &LONCAPA::clean_domain($domain);
     my $uhome = &Apache::lonnet::homeserver($username,$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'},      ($retrieved,$output,$upass) = &process_credentials($env{'form.logtoken'},
                                                        $env{'form.serverid'});                                                         $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 = '<br /><br />'.&mt('A LON-CAPA account already exists for username [_1] at this institution ([_2]).','<tt>'.$username.'</tt>',$domdesc).'<br />'.&mt('The password entered was also correct so you have been logged in.');
               return ('existingaccount',$output);
           } else {
               $output = &login_failure_msg($courseid);
           }
       } else {
         my $primlibserv = &Apache::lonnet::domain($domain,'primary');          my $primlibserv = &Apache::lonnet::domain($domain,'primary');
         my $authok;          my $authok;
         my %domdefaults = &Apache::lonnet::get_domain_defaults($domain);          my %domdefaults = &Apache::lonnet::get_domain_defaults($domain);
Line 744  sub username_validation { Line 864  sub username_validation {
             $authok = 'non_authorized';              $authok = 'non_authorized';
         }          }
         if ($authok eq 'authorized') {          if ($authok eq 'authorized') {
             ($output,undef) = &username_check($username,$domain,$domdesc,              $output = &username_check($username,$domain,$domdesc,$courseid,$lonhost,
                                               $courseid,$lonhost,$contact_email);                                         $contact_email,$contact_name);
         } else {          } else {
             $output = '<div class="LC_warning">'              $output = &login_failure_msg($courseid);
                      .&mt('Username and/or password could not be authenticated.')  
                      .'</div>'  
                      .&mt('Please check the username and password.');   
         }          }
     }      }
       return ('ok',$output);
   }
   
   sub login_failure_msg {
       my ($courseid) = @_;
       my $url;
       if ($courseid ne '') {
           $url = "/adm/selfenroll?courseid=".$courseid;
       } else {
           $url = "/adm/createaccount";
       }
       my $output = '<h4>'.&mt('Authentication failed').'</h4><div class="LC_warning">'.
                    &mt('Username and/or password could not be authenticated.').
                    '</div>'.
                    &mt('Please check the username and password.').'<br /><br />';
                    '<a href="'.$url.'">'.&mt('Try again').'</a>';
     return $output;      return $output;
 }  }
   
 sub username_check {  sub username_check {
     my ($username,$domain,$domdesc,$courseid,$lonhost,$contact_email) = @_;      my ($username,$domain,$domdesc,$courseid,$lonhost,$contact_email,$contact_name,
     my (%rulematch,%inst_results,$newuser,%alerts,%curr_rules,%got_rules);          $sso_logout) = @_;
     $newuser = 1;      my (%rulematch,%inst_results,$checkfail,$rowcount,$editable,$output,$msg,
     my $checkhash;          %alerts,%curr_rules,%got_rules);
     my $checks = { 'username' => 1 };      &call_rulecheck($username,$domain,\%alerts,\%rulematch,
     $checkhash->{$username.':'.$domain} = { 'newuser' => $newuser };                      \%inst_results,\%curr_rules,%got_rules,'username');
     &Apache::loncommon::user_rule_check($checkhash,$checks,\%alerts,\%rulematch,  
                                         \%inst_results,\%curr_rules,\%got_rules);  
     if (ref($alerts{'username'}) eq 'HASH') {      if (ref($alerts{'username'}) eq 'HASH') {
         if (ref($alerts{'username'}{$domain}) eq 'HASH') {          if (ref($alerts{'username'}{$domain}) eq 'HASH') {
             if ($alerts{'username'}{$domain}{$username}) {              if ($alerts{'username'}{$domain}{$username}) {
                 my ($userchkmsg,$checkfail);  
                 if (ref($curr_rules{$domain}) eq 'HASH') {                  if (ref($curr_rules{$domain}) eq 'HASH') {
                     $userchkmsg =                      $output =
                         &Apache::loncommon::instrule_disallow_msg('username',$domdesc,1).                          &Apache::loncommon::instrule_disallow_msg('username',$domdesc,1,
                                                                     'selfcreate').
                         &Apache::loncommon::user_rule_formats($domain,$domdesc,                          &Apache::loncommon::user_rule_formats($domain,$domdesc,
                                 $curr_rules{$domain}{'username'},'username');                                  $curr_rules{$domain}{'username'},'username');
                     if ($userchkmsg) {  
                         $checkfail = 'username';  
                     }  
                 }                  }
                 return ($userchkmsg,$checkfail);                  $checkfail = 'username';
             }              }
         }          }
     }      }
     my $submit_text = &mt('Create LON-CAPA account');      if (!$checkfail) {
     my $output = '<form method="post" action="/adm/createaccount">'.          $output = '<form method="post" action="/adm/createaccount">';
                  &Apache::loncreateuser::personal_data_display($username,$domain,1,          (my $datatable,$rowcount,$editable) = 
                                     undef,$inst_results{$username.':'.$domain}).              &Apache::loncreateuser::personal_data_display($username,$domain,1,'selfcreate',
                 '<br /><br /><input type="hidden" name="uname" value="'.$username.'" />'."\n".                                                           $inst_results{$username.':'.$domain});
                 '<input type="hidden" name="udom" value="'.$domain.'" />'."\n".          if ($rowcount > 0) {
                 '<input type="hidden" name="phase" value="username_activation" />';              $output .= $datatable;
     my $now = time;          }
     my %info = ('ip'         => $ENV{'REMOTE_ADDR'},          $output .=  '<br /><br /><input type="hidden" name="uname" value="'.$username.'" />'."\n".
                 'time'       => $now,                      '<input type="hidden" name="udom" value="'.$domain.'" />'."\n".
                 'domain'     => $domain,                      '<input type="hidden" name="phase" value="username_activation" />';
                 'username'   => $username);          my $now = time;
     my $authtoken = &Apache::lonnet::tmpput(\%info,$lonhost);          my %info = ('ip'         => $ENV{'REMOTE_ADDR'},
     if ($authtoken !~ /^error/ && $authtoken ne 'no_such_host') {                      'time'       => $now,
         $output .= '<input type="hidden" name="authtoken" value="'.&HTML::Entities::encode($authtoken,'&<>"').'" />';                      'domain'     => $domain,
     } else {                      'username'   => $username);
         $output = &mt('An error occurred when storing a token').'<br />'.          my $authtoken = &Apache::lonnet::tmpput(\%info,$lonhost);
                   &mt('You will not be able to proceed to the next stage of account creation').          if ($authtoken !~ /^error/ && $authtoken ne 'no_such_host') {
                   &linkto_email_help($contact_email,$domdesc);              $output .= '<input type="hidden" name="authtoken" value="'.&HTML::Entities::encode($authtoken,'&<>"').'" />';
         return($output,'authtoken');          } else {
     }              $output = &mt('An error occurred when storing a token').'<br />'.
     if ($courseid ne '') {                        &mt('You will not be able to proceed to the next stage of account creation').
         $output .= '<input type="hidden" name="courseid" value="'.$courseid.'" />';                        &linkto_email_help($contact_email,$domdesc);
               $checkfail = 'authtoken';
           }
       }
       if ($checkfail) { 
           $msg = '<h4>'.&mt('Account creation unavailable').'</h4>';
           if ($checkfail eq 'username') {
               $msg .= '<span class="LC_warning">'.
                        &mt('A LON-CAPA account may not be created with the username you use.').
                        '</span><br /><br />'.$output;
           } elsif ($checkfail eq 'authtoken') {
               $msg .= '<span class="LC_error">'.&mt('Error creating token.').'</span>'.
                       '<br />'.$output;
           }
           $msg .= &mt('Please contact the [_1] ([_2]) for assistance.',
                   $contact_name,$contact_email).'<br /><hr />'.
                   $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 {
           if ($courseid ne '') {
               $output .= '<input type="hidden" name="courseid" value="'.$courseid.'" />';
           }
           $output .= '<input type="submit" name="newaccount" value="'.
                      &mt('Create LON-CAPA account').'" /></form>';
           if ($rowcount) {
               if ($editable) {
                   if ($courseid ne '') { 
                       $msg = '<h4>'.&mt('User information').'</h4>';
                   }
                   $msg .= &mt('To create one, use the table below to provide information about yourself, then click the [_1]Create LON-CAPA account[_2] button.','<span class="LC_cusr_emph">','</span>').'<br />';
               } else {
                    if ($courseid ne '') {
                        $msg = '<h4>'.&mt('Review user information').'</h4>';
                    }
                    $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.','<span class="LC_cusr_emph">','</span>').'<br />';
               }
           } else {
               if ($courseid ne '') {
                   $msg = '<h4>'.&mt('Confirmation').'</h4>';
               }
               $msg .= &mt('Confirm that you wish to create an account.');
           }
           $msg .= $output;
     }      }
     $output .= '<input type="submit" name="newaccount" value="'.      return $msg;
                $submit_text.'" /></form>';  
     return ($output,'');  
 }  }
   
 sub username_activation {  sub username_activation {
Line 844  sub username_activation { Line 1012  sub username_activation {
     if ((($domdefaults{'auth_def'} =~/^krb(4|5)$/) &&       if ((($domdefaults{'auth_def'} =~/^krb(4|5)$/) && 
          ($domdefaults{'auth_arg_def'} ne '')) ||            ($domdefaults{'auth_arg_def'} ne '')) || 
         ($domdefaults{'auth_def'} eq 'localauth')) {          ($domdefaults{'auth_def'} eq 'localauth')) {
         if ($env{'form.cid'} ne '') {          if ($env{'form.courseid'} ne '') {
             my ($result,$userchkmsg) = &check_id($username,$domain,$domdesc);              my ($result,$userchkmsg) = &check_id($username,$domain,$domdesc);
             if ($result eq 'fail') {              if ($result eq 'fail') {
                 $output = $error.&mt('Invalid ID format').$end.                  $output = $error.&mt('Invalid ID format').$end.
Line 853  sub username_activation { Line 1021  sub username_activation {
             }              }
         }          }
         # Call modifyuser          # Call modifyuser
           my (%rulematch,%inst_results,%curr_rules,%got_rules,%alerts,%info);
           &call_rulecheck($username,$domain,\%alerts,\%rulematch,
                           \%inst_results,\%curr_rules,%got_rules);
           my @userinfo = ('firstname','middlename','lastname','generation',
                           'permanentemail','id');
           my %canmodify = 
               &Apache::loncreateuser::selfcreate_canmodify('selfcreate',$domain,
                                                            \@userinfo,\%inst_results);
           foreach my $item (@userinfo) {
               if ($canmodify{$item}) {
                   $info{$item} = $env{'form.c'.$item};
               } else {
                   $info{$item} = $inst_results{$username.':'.$domain}{$item}; 
               }
           }
           if (ref($inst_results{$username.':'.$domain}{'inststatus'}) eq 'ARRAY') {
               my @inststatuses = @{$inst_results{$username.':'.$domain}{'inststatus'}};
               $info{'inststatus'} = join(':',map { &escape($_); } @inststatuses);
           }
         my $result =          my $result =
             &Apache::lonnet::modifyuser($domain,$username,$env{'form.cid'},              &Apache::lonnet::modifyuser($domain,$username,$env{'form.cid'},
                           $domdefaults{'auth_def'},                            $domdefaults{'auth_def'},
                           $domdefaults{'auth_arg_def'},$env{'form.cfirstname'},                            $domdefaults{'auth_arg_def'},$info{'firstname'},
                           $env{'form.cmiddlename'},$env{'form.clastname'},                            $info{'middlename'},$info{'lastname'},
                           $env{'form.cgeneration'},undef,undef,                            $info{'generation'},undef,undef,
                           $env{'form.cpermanentemail'});                            $info{'permanentemail'},$info{'inststatus'});
         if ($result eq 'ok') {          if ($result eq 'ok') {
             my $delete = &Apache::lonnet::tmpdel($env{'form.authtoken'});              my $delete = &Apache::lonnet::tmpdel($env{'form.authtoken'});
             $output = &mt('A LON-CAPA account has been created for username: [_1] in domain: [_2].',$username,$domain);              $output = &mt('A LON-CAPA account has been created for username: [_1] in domain: [_2].',$username,$domain);
Line 911  sub invalid_state { Line 1098  sub invalid_state {
     if ($error eq 'baduseremail') {      if ($error eq 'baduseremail') {
         $msg = &mt('The e-mail address you provided does not appear to be a valid address.');          $msg = &mt('The e-mail address you provided does not appear to be a valid address.');
     } elsif ($error eq 'existinguser') {      } elsif ($error eq 'existinguser') {
         $msg = &mt('The e-mail address you provided is already in use as a username in this LON-CAPA domain.');          $msg = &mt('The e-mail address you provided is already in use as a username in LON-CAPA at this institution.');
     } elsif ($error eq 'userrules') {      } elsif ($error eq 'userrules') {
         $msg = &mt('Username rules for this LON-CAPA domain do not allow the e-mail address you provided to be used as a username.');          $msg = &mt('Username rules at this institution do not allow the e-mail address you provided to be used as a username.');
     } elsif ($error eq 'userformat') {      } elsif ($error eq 'userformat') {
         $msg = &mt('The e-mail address you provided may not be used as a username in this LON-CAPA domain.');          $msg = &mt('The e-mail address you provided may not be used as a username at this LON-CAPA institution.');
     } elsif ($error eq 'captcha') {      } elsif ($error eq 'captcha') {
         $msg = &mt('Validation of the code your entered failed.');          $msg = &mt('Validation of the code your entered failed.');
     } elsif ($error eq 'noemails') {      } elsif ($error eq 'noemails') {
         $msg = &mt('Creation of a new user account using an e-mail address as username is not permitted in this LON-CAPA domain.');          $msg = &mt('Creation of a new user account using an e-mail address as username is not permitted at this LON-CAPA institution.');
     }      }
     $msg .= '</span>';      $msg .= '</span>';
     if ($msgtext) {      if ($msgtext) {
Line 934  sub linkto_email_help { Line 1121  sub linkto_email_help {
     my $msg;      my $msg;
     if ($contact_email ne '') {      if ($contact_email ne '') {
         my $escuri = &HTML::Entities::encode('/adm/createaccount','&<>"');          my $escuri = &HTML::Entities::encode('/adm/createaccount','&<>"');
         $msg .= '<br />'.&mt('You may wish to contact the [_1]LON-CAPA helpdesk[_2] for the [_3] domain.','<a href="/adm/helpdesk?origurl='.$escuri.'">','</a>',$domdesc);          $msg .= '<br />'.&mt('You may wish to contact the [_1]LON-CAPA helpdesk[_2] for [_3].','<a href="/adm/helpdesk?origurl='.$escuri.'">','</a>',$domdesc).'<br />';
     } else {      } else {
         $msg .= '<br />'.&mt('You may wish to send an e-mail to the server administrator: [_1] for the [_2] domain.',$Apache::lonnet::perlvar{'AdminEmail'},$domdesc);          $msg .= '<br />'.&mt('You may wish to send an e-mail to the server administrator: [_1] for [_2].',$Apache::lonnet::perlvar{'AdminEmail'},$domdesc).'<br />';
     }      }
     return $msg;      return $msg;
 }  }
Line 944  sub linkto_email_help { Line 1131  sub linkto_email_help {
 sub create_captcha {  sub create_captcha {
     my ($output_dir,$db_dir) = @_;      my ($output_dir,$db_dir) = @_;
     my %captcha_params = &captcha_settings();      my %captcha_params = &captcha_settings();
     my $captcha = Authen::Captcha->new(      my ($output,$maxtries,$tries) = ('',10,0);
                                        output_folder => $captcha_params{'output_dir'},      while ($tries < $maxtries) {
                                        data_folder   => $captcha_params{'db_dir'},          $tries ++;
                                       );          my $captcha = Authen::Captcha->new (
     my $md5sum = $captcha->generate_code($captcha_params{'numchars'});                                             output_folder => $captcha_params{'output_dir'},
     my $output = '<input type="hidden" name="crypt" value="'.$md5sum.'" />'."\n".                                             data_folder   => $captcha_params{'db_dir'},
                  &mt('Type in the letters/numbers shown below').'&nbsp;'.                                            );
                  '<input type="text" size="5" name="code" value="" /><br />'.          my $md5sum = $captcha->generate_code($captcha_params{'numchars'});
                  '<img src="'.$captcha_params{'www_output_dir'}.'/'.$md5sum.'.png">';  
           if (-e $Apache::lonnet::perlvar{'lonCaptchaDir'}.'/'.$md5sum.'.png') {
               $output = '<input type="hidden" name="crypt" value="'.$md5sum.'" />'."\n".
                         &mt('Type in the letters/numbers shown below').'&nbsp;'.
                        '<input type="text" size="5" name="code" value="" /><br />'.
                        '<img src="'.$captcha_params{'www_output_dir'}.'/'.$md5sum.'.png">';
               last;
           }
       }
     return $output;      return $output;
 }  }
   
Line 977  sub getkeys { Line 1172  sub getkeys {
 }  }
   
 sub serverform {  sub serverform {
     my ($logtoken,$lonhost,$mailtoken,$courseid) = @_;      my ($logtoken,$lonhost,$mailtoken,$courseid,$context) = @_;
     my $output .= <<ENDSERVERFORM;      my $phase = 'username_validation';
   <form name="server" method="post" target="_top">      my $catalog_elements;
       if ($context eq 'selfenroll') {
           $phase = 'selfenroll_login';
       }
       if ($courseid ne '') {
           $catalog_elements = &Apache::lonhtmlcommon::echo_form_input(['courseid','phase']);
       } 
       my $output = <<ENDSERVERFORM;
     <form name="server" method="post" action="/adm/createaccount">
    <input type="hidden" name="logtoken" value="$logtoken" />     <input type="hidden" name="logtoken" value="$logtoken" />
    <input type="hidden" name="token" value="$mailtoken" />     <input type="hidden" name="token" value="$mailtoken" />
    <input type="hidden" name="serverid" value="$lonhost" />     <input type="hidden" name="serverid" value="$lonhost" />
    <input type="hidden" name="uname" value="" />     <input type="hidden" name="uname" value="" />
    <input type="hidden" name="upass" value="" />     <input type="hidden" name="upass" value="" />
    <input type="hidden" name="phase" value="username_validation" />     <input type="hidden" name="phase" value="$phase" />
    <input type="hidden" name="courseid" value="$courseid" />     <input type="hidden" name="courseid" value="$courseid" />
      $catalog_elements
   </form>    </form>
 ENDSERVERFORM  ENDSERVERFORM
     return $output;      return $output;
Line 1050  sub guest_format_check { Line 1254  sub guest_format_check {
     return $format_msg;      return $format_msg;
 }  }
   
   sub sso_logout_frag {
       my ($r,$domain) = @_;
       my $endsessionmsg;
       if (defined($r->dir_config('lonSSOUserLogoutMessageFile_'.$domain))) {
           my $msgfile = $r->dir_config('lonSSOUserLogoutMessageFile_'.$domain);
           if (-e $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");
               $endsessionmsg = join('',<$fh>);
               close($fh);
           }
       }
       return $endsessionmsg;
   }
   
   sub catreturn_js {
       return  <<"ENDSCRIPT";
   <script type="text/javascript">
   
   function ToSelfenroll(formname) {
       var formidx = getFormByName(formname);
       if (formidx > -1) {
           document.forms[formidx].action = '/adm/selfenroll';
           numidx = getIndexByName(formidx,'phase');
           if (numidx > -1) {
               document.forms[formidx].elements[numidx].value = '';   
           }
           numidx = getIndexByName(formidx,'context');
           if (numidx > -1) {
               document.forms[formidx].elements[numidx].value = '';
           }
       }
       document.forms[formidx].submit();
   }
   
   function ToCatalog(formname,caller) {
       var formidx = getFormByName(formname);
       if (formidx > -1) {
           document.forms[formidx].action = '/adm/coursecatalog';
           numidx = getIndexByName(formidx,'coursenum');
           if (numidx > -1) {
               if (caller != 'details') {
                   document.forms[formidx].elements[numidx].value = '';
               }
           }
       }
       document.forms[formidx].submit();
   }
   
   function getIndexByName(formidx,item) {
       for (var i=0;i<document.forms[formidx].elements.length;i++) {
           if (document.forms[formidx].elements[i].name == item) {
               return i;
           }
       }
       return -1;
   }
   
   function getFormByName(item) {
       for (var i=0; i<document.forms.length; i++) {
           if (document.forms[i].name == item) {
               return i;
           }
       }
       return -1;
   }
   
   </script>
   ENDSCRIPT
   
   }
   
 1;  1;

Removed from v.1.15  
changed lines
  Added in v.1.28


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.