Diff for /loncom/interface/createaccount.pm between versions 1.72 and 1.72.4.3

version 1.72, 2016/02/19 20:28:46 version 1.72.4.3, 2019/08/25 13:55:55
Line 37  use Apache::lonacc; Line 37  use Apache::lonacc;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonhtmlcommon;  use Apache::lonhtmlcommon;
   use Apache::lonuserutils;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonauth;  use Apache::lonauth;
 use Apache::resetpw;  use Apache::resetpw;
Line 124  sub handler { Line 125  sub handler {
   
         my %domconfig =           my %domconfig = 
             &Apache::lonnet::get_dom('configuration',['usercreation'],$domain);              &Apache::lonnet::get_dom('configuration',['usercreation'],$domain);
         my ($cancreate,$statustocreate,$emailusername) =           my ($cancreate,$statustocreate) = 
             &get_creation_controls($domain,$domconfig{'usercreation'});              &get_creation_controls($domain,$domconfig{'usercreation'});
   
         my ($result,$output) =          my ($result,$output) =
Line 146  sub handler { Line 147  sub handler {
             return OK;              return OK;
         }          }
     }      }
     $start_page = &Apache::loncommon::start_page($title,$js);  
   
     my %domconfig =       my %domconfig =
         &Apache::lonnet::get_dom('configuration',['usercreation'],$domain);          &Apache::lonnet::get_dom('configuration',['usercreation'],$domain);
     my ($cancreate,$statustocreate,$emailusername) =       my ($cancreate,$statustocreate,$statusforemail,$emailusername,
           $emailoptions,$verification,$emaildomain,$types,$usertypes,$othertitle) =
         &get_creation_controls($domain,$domconfig{'usercreation'});          &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 eq '') || (!grep(/^\Q$usertype\E$/,@{$statusforemail}))) && 
                       (@{$statusforemail} > 0)) {
                       $js .= &setelements_js($statusforemail,$types,$usertypes,$othertitle);
                       $additems = {'add_entries' => { 'onload' => "setElements();"} };
                       if ((@{$cancreate} == 1) && (@{$statusforemail} > 0)) {
                           $pagetitle = 'Select affiliation';
                       }
                   } else {
                       $js .= &username_js();
                   }
               }
           }
       }
       $start_page = &Apache::loncommon::start_page($title,$js,$additems);
     if (@{$cancreate} == 0) {      if (@{$cancreate} == 0) {
         &print_header($r,$start_page,$courseid);          &print_header($r,$start_page,$courseid,$pagetitle);
         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 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).
                      '</span><br /><br />';                       '</span><br /><br />';
         $r->print($output);          $r->print($output);
         &print_footer($r);          &print_footer($r);
Line 178  sub handler { Line 199  sub handler {
                         if (ref($domconfig{'usercreation'}{'cancreate'}{'shibenv'}) eq 'HASH') {                          if (ref($domconfig{'usercreation'}{'cancreate'}{'shibenv'}) eq 'HASH') {
                             my @possfields = ('firstname','middlename','lastname','generation',                              my @possfields = ('firstname','middlename','lastname','generation',
                                               'permanentemail','id');                                                'permanentemail','id');
                             my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($domain);  
                             $shibenv= {};                              $shibenv= {};
                             foreach my $key (keys(%{$domconfig{'usercreation'}{'cancreate'}{'shibenv'}})) {                              foreach my $key (keys(%{$domconfig{'usercreation'}{'cancreate'}{'shibenv'}})) {
                                 if ($key eq 'inststatus') {                                  if ($key eq 'inststatus') {
Line 215  sub handler { Line 235  sub handler {
     my ($output,$nostart,$noend,$redirect);      my ($output,$nostart,$noend,$redirect);
     my $token = $env{'form.token'};      my $token = $env{'form.token'};
     if ($token) {      if ($token) {
         my $usertype = &get_usertype($domain);  
         ($output,$nostart,$noend,$redirect) =           ($output,$nostart,$noend,$redirect) = 
             &process_mailtoken($r,$token,$contact_name,$contact_email,$domain,              &process_mailtoken($r,$token,$contact_name,$contact_email,$domain,
                                $domdesc,$lonhost,$include,$start_page,$cancreate,                                 $domdesc,$lonhost,$include,$start_page,$cancreate,
                                $domconfig{'usercreation'},$usertype);                                 $domconfig{'usercreation'},$types);
         if ($redirect) {          if ($redirect) {
             $r->internal_redirect('/adm/switchserver');              $r->internal_redirect('/adm/switchserver');
             return OK;              return OK;
Line 238  sub handler { Line 257  sub handler {
             return OK;              return OK;
         }          }
     }      }
       my ($usernameset,$condition,$excluded,$hascustom);
       if ((grep(/^email$/,@{$cancreate})) && (($env{'form.create_with_email'}) ||
                                               ((!$token) && ($env{'form.phase'} eq '')))) {
           my $usertype = &get_usertype($domain);
           if ($usertype eq '') {
               $usertype = 'default';
           }
           if (ref($verification) eq 'HASH') {
               if ($verification->{$usertype} =~ /^(free|first)$/) {
                   $usernameset = $verification->{$usertype};
               }
           }
           if (ref($emailoptions) eq 'HASH') {
               if ($emailoptions->{$usertype} =~ /^(inst|noninst)$/) {
                   my $chosen = $1;
                   if (ref($emaildomain) eq 'HASH') {
                       if (ref($emaildomain->{$usertype}) eq 'HASH') {
                           if ($chosen eq 'inst') {
                               $condition = $emaildomain->{$usertype}->{$chosen};
                           } else {
                               $excluded = $emaildomain->{$usertype}->{$chosen};
                           }
                       }
                   }
               } elsif ($emailoptions->{$usertype} eq 'custom') {
                   $hascustom = 1;
               }
           }
       }
     if ($env{'form.phase'} eq 'username_activation') {      if ($env{'form.phase'} eq 'username_activation') {
         (my $result,$output,$nostart) =           (my $result,$output,$nostart) = 
             &username_activation($r,$env{'form.uname'},$domain,$domdesc,              &username_activation($r,$env{'form.uname'},$domain,$domdesc,
Line 270  sub handler { Line 317  sub handler {
     } elsif ($env{'form.create_with_email'}) {      } elsif ($env{'form.create_with_email'}) {
         &print_header($r,$start_page,$courseid);          &print_header($r,$start_page,$courseid);
         my $usertype = &get_usertype($domain);          my $usertype = &get_usertype($domain);
           if ($usertype eq '') {
               $usertype = 'default';
           }
         $output = &process_email_request($env{'form.uname'},$domain,$domdesc,          $output = &process_email_request($env{'form.uname'},$domain,$domdesc,
                                          $contact_name,$contact_email,$cancreate,                                           $contact_name,$contact_email,$cancreate,
                                          $lonhost,$domconfig{'usercreation'},                                           $lonhost,$domconfig{'usercreation'},
                                          $emailusername,$courseid,$usertype);                                           $emailusername,$courseid,$usertype,
                                            $usernameset,$condition,$excluded,$hascustom);
     } elsif (!$token) {      } elsif (!$token) {
         &print_header($r,$start_page,$courseid);          &print_header($r,$start_page,$courseid,$pagetitle);
         my $now=time;          my $now=time;
         if ((grep(/^login$/,@{$cancreate})) && (!grep(/^email$/,@{$cancreate}))) {          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>) {                  while(my $line = <$jsh>) {
                     $r->print($line);                      $r->print($line);
                 }                  }
Line 287  sub handler { Line 338  sub handler {
             }              }
         }          }
         if (grep(/^email$/,@{$cancreate})) {          if (grep(/^email$/,@{$cancreate})) {
             $r->print(&javascript_validmail());              $r->print(&javascript_validmail($condition));
         }          }
         my $usertype = &get_usertype($domain);          my $usertype = &get_usertype($domain);
         $output = &print_username_form($r,$domain,$domdesc,$cancreate,$now,$lonhost,          $output = &print_username_form($r,$domain,$domdesc,$cancreate,$now,$lonhost,
                                        $include,$courseid,$emailusername,$usertype);                                         $include,$courseid,$emailusername,
                                          $statusforemail,$usernameset,$condition,
                                          $excluded,$usertype,$types,$usertypes,$othertitle);
     }      }
     $r->print($output);      $r->print($output);
     &print_footer($r);      &print_footer($r);
Line 299  sub handler { Line 352  sub handler {
 }  }
   
 sub print_header {  sub print_header {
     my ($r,$start_page,$courseid) = @_;      my ($r,$start_page,$courseid,$pagetitle) = @_;
     $r->print($start_page);      $r->print($start_page);
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
       my $url = '/adm/createaccount';
       if ($pagetitle eq '') {
           $pagetitle = 'New username';
       }
     if ($courseid ne '') {      if ($courseid ne '') {
         my %coursehash = &Apache::lonnet::coursedescription($courseid);          my %coursehash = &Apache::lonnet::coursedescription($courseid);
         &selfenroll_crumbs($r,$courseid,$coursehash{'description'});          &selfenroll_crumbs($r,$courseid,$coursehash{'description'});
     }      }
       if ($env{'form.reportedtype'}) {
           &Apache::lonhtmlcommon::add_breadcrumb
           ({href=>$url,
             text=>"Select affiliation"});
       }
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
     ({href=>"/adm/createuser",      ({href=>$url,
       text=>"New username"});        text=>$pagetitle});
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Create account'));      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Create account'));
     return;      return;
 }  }
Line 329  sub print_footer { Line 391  sub print_footer {
   
 sub get_usertype {  sub get_usertype {
     my ($domain) = @_;      my ($domain) = @_;
     my $usertype = 'default';      my $usertype;
     my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($domain);      my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($domain);
     if (ref($types) eq 'ARRAY') {      if (ref($types) eq 'ARRAY') {
         push(@{$types},'default');          push(@{$types},'default');
Line 366  sub selfenroll_crumbs { Line 428  sub selfenroll_crumbs {
 }  }
   
 sub javascript_setforms {  sub javascript_setforms {
     my ($now,$emailusername,$captcha,$usertype,$recaptchaversion) =  @_;      my ($now,$emailusername,$captcha,$usertype,$recaptchaversion,$usernameset,$condition,$excluded) =  @_;
     my ($setuserinfo,@required,$requiredchk);      my ($setuserinfo,@required,$requiredchk);
     if (ref($emailusername) eq 'HASH') {      if (ref($emailusername) eq 'HASH') {
         if (ref($emailusername->{$usertype}) eq 'HASH') {            if (ref($emailusername->{$usertype}) eq 'HASH') {  
Line 388  sub javascript_setforms { Line 450  sub javascript_setforms {
                 '                    server.elements.recaptcha_response_field.value=client.elements.recaptcha_response_field.value;'."\n";                  '                    server.elements.recaptcha_response_field.value=client.elements.recaptcha_response_field.value;'."\n";
             }              }
         }          }
           if ($usernameset eq 'free') {
               $setuserinfo .=
                   '                    server.elements.username.value=client.elements.username.value;'."\n";
           }
     }      }
     if (@required) {      if (@required) {
         my $missprompt = &mt('One or more required fields are currently blank.');          my $missprompt = &mt('One or more required fields are currently blank.');
Line 431  $requiredchk Line 497  $requiredchk
                 uextkey=client.elements.uextkey.value;                  uextkey=client.elements.uextkey.value;
                 lextkey=client.elements.lextkey.value;                  lextkey=client.elements.lextkey.value;
                 initkeys();                  initkeys();
   
                 server.elements.upass.value                  server.elements.upass.value
                     = getCrypted(client.elements.upass$now.value);                      = getCrypted(client.elements.upass$now.value);
   
                 client.elements.uname.value='';                  client.elements.uname.value='';
                 client.elements.upass$now.value='';                  client.elements.upass$now.value='';
                 if (context == 'email') {                  if (context == 'email') {
Line 457  ENDSCRIPT Line 521  ENDSCRIPT
 }  }
   
 sub javascript_checkpass {  sub javascript_checkpass {
     my ($now,$context) = @_;      my ($now,$context,$domain) = @_;
     my $nopass = &mt('You must enter a password.');      my $nopass = &mt('You must enter a password.');
     my $mismatchpass = &mt('The passwords you entered did not match.')."\n".      my $mismatchpass = &mt('The passwords you entered did not match.')."\n".
                        &mt('Please try again.');                          &mt('Please try again.'); 
       my ($numrules,$intargjs) =
           &Apache::lonuserutils::passwd_validation_js('upass',$domain);
     &js_escape(\$nopass);      &js_escape(\$nopass);
     &js_escape(\$mismatchpass);      &js_escape(\$mismatchpass);
     my $js = <<"ENDSCRIPT";      my $js = <<"ENDSCRIPT";
Line 477  sub javascript_checkpass { Line 543  sub javascript_checkpass {
                 return false;                  return false;
             }              }
             if (upass == upasscheck) {              if (upass == upasscheck) {
                   var numrules = $numrules;
                   if (numrules > 0) {
   $intargjs
                   }
                 client.elements.upasscheck$now.value='';                  client.elements.upasscheck$now.value='';
                 if (validate_email(client)) {                  if (validate_email(client)) {
                     send(one,two,'$context');                      send(one,two,'$context');
Line 496  ENDSCRIPT Line 566  ENDSCRIPT
 }  }
   
 sub javascript_validmail {  sub javascript_validmail {
       my ($condition) = @_;
     my %js_lt = &Apache::lonlocal::texthash (      my %js_lt = &Apache::lonlocal::texthash (
                email => 'The e-mail address you entered',                 email => 'The e-mail address you entered',
                notv  => 'is not a valid e-mail address',                 notv  => 'is not a valid e-mail address',
                  avae  => 'A valid e-mail address is not formed when the value you entered',
                  isco  => 'is combined with the required domain',
     );      );
     my $output =  "\n".'<script type="text/javascript">'."\n".      my $output =  "\n".'<script type="text/javascript">'."\n".
                   '// <![CDATA['."\n".                    '// <![CDATA['."\n".
Line 507  sub javascript_validmail { Line 580  sub javascript_validmail {
     $output .= <<"ENDSCRIPT";      $output .= <<"ENDSCRIPT";
 function validate_email(client) {  function validate_email(client) {
     field = client.uname;      field = client.uname;
     if (validmail(field) == false) {      var condition = '$condition';
         alert("$js_lt{'email'}: "+field.value+" $js_lt{'notv'}.");      if (validmail(field,condition) == false) {
           if ((condition != undefined) && (condition != '')) {
               alert("$js_lt{'avae'}: "+field.value+" $js_lt{'isco'}: "+condition);
           } else {
               alert("$js_lt{'email'}: "+field.value+" $js_lt{'notv'}.");
           }
         return false;          return false;
     }      }
     return true;      return true;
Line 520  ENDSCRIPT Line 598  ENDSCRIPT
   
 sub print_username_form {  sub print_username_form {
     my ($r,$domain,$domdesc,$cancreate,$now,$lonhost,$include,$courseid,$emailusername,      my ($r,$domain,$domdesc,$cancreate,$now,$lonhost,$include,$courseid,$emailusername,
         $usertype) = @_;          $statusforemail,$usernameset,$condition,$excluded,$usertype,$types,$usertypes,
           $othertitle) = @_;
     my %lt = &Apache::lonlocal::texthash (      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',                                           crac => 'Create account with a username provided by this institution',
                                          clca => 'Create LON-CAPA account',                                           clca => 'Create LON-CAPA account',
                                          type => 'Type in your log-in ID and password to find out.',                                           type => 'Type in your log-in ID and password to find out.',
                                          plse => 'Please provide a password for your new account.',                                           plse => 'Please provide a password for your new account.',
                                          info => 'Please provide user information and 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).',                                           yopw => 'Your password will be encrypted when sent (and stored).',
                                            crae => 'Create account using e-mail address verification',
                                          );                                           );
     my $output;      my $output;
     if (ref($cancreate) eq 'ARRAY') {      if (ref($cancreate) eq 'ARRAY') {
Line 548  sub print_username_form { Line 624  sub print_username_form {
             }              }
         }          }
         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>'.$lt{'crae'}.'</h3>';
             my ($captchaform,$error,$captcha,$recaptchaversion) =               if ($usertype ne '') {
                 &Apache::loncommon::captcha_display('usercreation',$lonhost);                  if ((ref($statusforemail) eq 'ARRAY') && (@{$statusforemail} > 0)) {
             if ($error) {                      unless (grep(/^\Q$usertype\E$/,@{$statusforemail})) {
                 my $helpdesk = '/adm/helpdesk?origurl=%2fadm%2fcreateaccount';                          undef($usertype);
                 if ($courseid ne '') {                      }
                     $helpdesk .= '&courseid='.$courseid;                  } elsif ($usertype ne 'default') {
                 }                      undef($usertype);
                 $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 />'.              if (($usertype eq '') && (ref($statusforemail) eq 'ARRAY') && 
                            &mt('[_1]Contact the helpdesk[_2] or [_3]reload[_2] the page and try again.',                  (@{$statusforemail} > 0) && (ref($types) eq 'ARRAY') && (@{$types} > 0)) {
                                '<a href="'.$helpdesk.'">','</a>','<a href="javascript:window.location.reload()">');                  my @posstypes = @{$types};
                   unless (grep(/^default$/,@posstypes)) {
                       push(@posstypes,'default');
                   }
                   $output .= '<p>'.&mt('Choose your affiliation at [_1]',$domdesc).'</p>'."\n".
                              '<form name="reportstatus" id="LC_reportstatus" action="/adm/createaccount" method="post" '.
                              'onsubmit="return checkVerification();"><p>';
                   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};
                               }
                           }
                       }
                       my $checked;
                       if ($env{'form.type'} eq $type) {
                           $checked = ' checked="checked"';
                       }
                       $output .= '<label><input type="radio" name="type" value="'.$type.'"'.$checked.' />'.
                                  $name.'</label>'.('&nbsp;'x2);
                   }
                   if ($env{'form.courseid'} =~ /^$match_domain\_$match_courseid$/) {
                       $output .= "\n".'<input type="hidden" name="courseid" value="'.$env{'form.courseid'}.'" />';
                   }
                   $output .= '</p>'."\n".'<p><input type="submit" name="reportedtype" value="'.&mt('Submit').'" /></p></form>';
             } else {              } else {
                 if (grep(/^login$/,@{$cancreate})) {                  my ($captchaform,$error,$captcha,$recaptchaversion) = 
                     $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.','<br />').'<br /><br />'.                      &Apache::loncommon::captcha_display('usercreation',$lonhost);
                                $lt{'plse'}.'<br />'.                  if ($error) {
                                $lt{'yopw'}.'<br />';                      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 use of an e-mail address to request a LON-CAPA account.','<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()">');
                 } else {                  } else {
                     my $prompt = $lt{'plse'};                      if (grep(/^login$/,@{$cancreate})) {
                     if (ref($emailusername) eq 'HASH') {                          $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.','<br />').'<br /><br />'.
                         if (ref($emailusername->{$usertype}) eq 'HASH') {                                     $lt{'plse'}.'<br />'.
                             if (keys(%{$emailusername->{$usertype}}) > 0) {                                     $lt{'yopw'}.'<br />';
                                 $prompt = $lt{'info'};                      } 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.'<br />'.
                                      $lt{'yopw'}.'<br />';
                     }                      }
                     $output .= $prompt.'<br />'.                      if ($usertype eq '') {
                                $lt{'yopw'}.'<br />';                          $usertype = 'default';
                       } elsif (ref($usertypes) eq 'HASH') {
                           my $usertitle;
                           if ($usertype eq 'default') {
                               $usertitle = $othertitle;
                           } elsif (exists($usertypes->{$usertype})) {
                               $usertitle = $usertypes->{$usertype};
                           }
                           if ($usertitle ne '') {
                               $output .= &mt('Self-reported affiliation: [_1]',
                                              '<span style="font-style: italic;">'.$usertitle.'</span>').
                                          '<br />';
                           }
                       }
                       $output .= &print_dataentry_form($r,$domain,$lonhost,$include,$now,$captchaform,
                                                        $courseid,$emailusername,$captcha,$usertype,
                                                        $recaptchaversion,$usernameset,$condition,$excluded);
                 }                  }
                 $output .= &print_dataentry_form($r,$domain,$lonhost,$include,$now,$captchaform,  
                                                  $courseid,$emailusername,$captcha,$usertype,  
                                                  $recaptchaversion);  
             }              }
             $output .= '</div>';              $output .= '</div>';
         }          }
     }      }
     if ($output eq '') {      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 {      } else {
         $output .= '<div class="LC_clear_float_footer"></div>';          $output .= '<div class="LC_clear_float_footer"></div>';
     }      }
Line 646  sub login_box { Line 780  sub login_box {
   
 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,$emailusername,$courseid,$usertype) = @_;          $server,$settings,$emailusername,$courseid,$usertype,$usernameset,
     my $output;          $condition,$excluded,$hascustom) = @_;
       my ($output,$uname);
     if (ref($cancreate) eq 'ARRAY') {      if (ref($cancreate) eq 'ARRAY') {
         if (!grep(/^email$/,@{$cancreate})) {          if (!grep(/^email$/,@{$cancreate})) {
             $output = &invalid_state('noemails',$domdesc,              $output = &invalid_state('noemails',$domdesc,
                                      $contact_name,$contact_email);                                       $contact_name,$contact_email);
             return $output;              return $output;
         } elsif ($useremail !~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/) {          } elsif ((($condition ne '') && ($useremail !~ /^[^\@]+$/)) ||
                    (($condition eq '') && ($useremail !~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/))) {
             $output = &invalid_state('baduseremail',$domdesc,              $output = &invalid_state('baduseremail',$domdesc,
                                      $contact_name,$contact_email);                                       $contact_name,$contact_email);
             return $output;              return $output;
         } else {          } else {
             $useremail =~ s/^\s+|\s+$//g;              $useremail =~ s/^\s+|\s+$//g;
             my $uname=&LONCAPA::clean_username($useremail);              my $possuname;
             if ($useremail ne $uname) {              if ($condition ne '') {
                 $output = &invalid_state('badusername',$domdesc,                  if ($usernameset eq 'first') {
                                          $contact_name,$contact_email);                      $possuname = $useremail;
                 return $output;                  }
                   $useremail .= $condition;
               } elsif ($excluded ne '') {
                   if ($useremail =~ /^[^\@]+\Q$excluded\E$/) {
                       $output = &invalid_state('userrules',$domdesc,
                                        $contact_name,$contact_email);
                       return $output;
                   } 
               }
               if (($usernameset eq 'free') && ($env{'form.username'} ne '')) {
                   $possuname = $env{'form.username'};
               } elsif (($usernameset eq 'first') && ($condition eq '')) {
                   if ($condition eq '') {
                       ($possuname) = ($useremail =~ /^([^\@]+)\@/);
                   }
             }              }
             my $uhome = &Apache::lonnet::homeserver($useremail,$domain);              if ($possuname ne '') {
                   $possuname  =~ s/^\s+|\s+$//g;
                   if ($possuname ne '') {
                       $uname=&LONCAPA::clean_username($possuname);
                       if ($uname ne $possuname) {
                           $output = &invalid_state('badusername',$domdesc,
                                                    $contact_name,$contact_email);
                           return $output;
                       }
                   }
               }
               if ($possuname eq '') {
                   $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($uname,$domain);
             if ($uhome ne 'no_host') {              if ($uhome ne 'no_host') {
                 $output = &invalid_state('existinguser',$domdesc,                  $output = &invalid_state('existinguser',$domdesc,
                                          $contact_name,$contact_email);                                           $contact_name,$contact_email);
Line 673  sub process_email_request { Line 842  sub process_email_request {
             } else {              } else {
                 my ($captcha_chk,$captcha_error) = &Apache::loncommon::captcha_response('usercreation',$server);                  my ($captcha_chk,$captcha_error) = &Apache::loncommon::captcha_response('usercreation',$server);
                 if ($captcha_chk != 1) {                  if ($captcha_chk != 1) {
                     $output = &invalid_state('captcha',$domdesc,$contact_name,                      $output = '<span class="LC_warning">'.
                                              $contact_email,$captcha_error);                                &mt('Validation of the code you entered failed.').'</span>'.
                                 '<br />'.$captcha_error."\n".'<br /><p>'.
                                  &mt('[_1]Return[_2] to the previous page to try again.',
                                      '<a href="javascript:document.retryemail.submit();">','</a>')."\n".
                                 '<form name="retryemail" action="/adm/createaccount" method="post" />'.
                                 '<input type="hidden" name="domain" value="'.$domain.'" />'."\n";
                       if ($env{'form.courseid'} =~ /^$match_domain\_$match_courseid$/) {
                           $output .= '<input type="hidden" name="courseid" value="'.$env{'form.courseid'}.'" />'."\n";
                       }
                       if ($env{'form.type'}) {
                           my $usertype = &get_usertype($domain);
                           if ($usertype ne '') {
                               $output .= '<input type="hidden" name="type" value="'.$usertype.'" />'."\n".
                                          '<input type="hidden" name="reportedtype" value="'.&mt('Submit').'" />'."\n";
                           }
                       }
                       $output .= '</form></p>';
                     return $output;                      return $output;
                 }                  }
                 my (%rulematch,%inst_results,%curr_rules,%got_rules,%alerts);                  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');                                  \%inst_results,\%curr_rules,\%got_rules,'username');
                 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}{$useremail}) {                          if ($alerts{'username'}{$domain}{$uname}) {
                             $output = &invalid_state('userrules',$domdesc,                              $output = &invalid_state('userrules',$domdesc,
                                                      $contact_name,$contact_email);                                                       $contact_name,$contact_email);
                             return $output;                              return $output;
                         }                          }
                     }                      }
                 }                  }
                 my $format_msg =                   if ($hascustom) {
                     &guest_format_check($useremail,$domain,$cancreate,                      my $format_msg = 
                                         $settings);                          &guest_format_check($useremail,$domain,$cancreate,
                 if ($format_msg) {                                              $settings,$usertype);
                     $output = &invalid_state('userformat',$domdesc,$contact_name,                      if ($format_msg) {
                                              $contact_email,$format_msg);                          $output = &invalid_state('userformat',$domdesc,$contact_name,
                     return $output;                                                   $contact_email,$format_msg);
                           return $output;
                       }
                 }                  }
             }              }
         }          }
         $output = &send_token($domain,$useremail,$server,$domdesc,$contact_name,          $output = &send_token($domain,$useremail,$server,$domdesc,$contact_name,
                               $contact_email,$courseid,$emailusername,$usertype);                                $contact_email,$courseid,$emailusername,$usertype,
                                 $uname);
     }      }
     return $output;      return $output;
 }  }
Line 721  sub call_rulecheck { Line 909  sub call_rulecheck {
   
 sub send_token {  sub send_token {
     my ($domain,$email,$server,$domdesc,$contact_name,$contact_email,$courseid,$emailusername,      my ($domain,$email,$server,$domdesc,$contact_name,$contact_email,$courseid,$emailusername,
         $usertype) = @_;          $usertype,$uname) = @_;
     my $msg = '<h3>'.&mt('Account creation status').'</h3>'.      my $msg = '<h3>'.&mt('Account creation status').'</h3>'.
               &mt('Thank you for your request to create a new LON-CAPA account.').                &mt('Thank you for your request to create a new LON-CAPA account.').
               '<br /><br />';                '<br /><br />';
Line 729  sub send_token { Line 917  sub send_token {
     $env{'form.logtoken'} =~ s/(`)//g;      $env{'form.logtoken'} =~ s/(`)//g;
     if ($env{'form.logtoken'}) {      if ($env{'form.logtoken'}) {
         my $logtoken = $env{'form.logtoken'};          my $logtoken = $env{'form.logtoken'};
           my $earlyout;
         my $tmpinfo=Apache::lonnet::reply('tmpget:'.$logtoken,$server);          my $tmpinfo=Apache::lonnet::reply('tmpget:'.$logtoken,$server);
         if (($tmpinfo=~/^error/) || ($tmpinfo eq 'con_lost')) {          if (($tmpinfo=~/^error/) || ($tmpinfo eq 'con_lost')) {
             $msg = &mt('Information needed to process your request is missing, inaccessible or expired.')              $msg = &mt('Information needed to process your request is missing, inaccessible or expired.')
                   .'<br />'.&mt('Return to the previous page to try again.');                    .'<br /><p>'.&mt('[_1]Return[_2] to the previous page to try again.',
                                      '<a href="javascript:document.retryemail.submit();">','</a>');
               $earlyout = 1;
         } else {          } else {
             my $reply = &Apache::lonnet::reply('tmpdel:'.$logtoken,$server);              my $reply = &Apache::lonnet::reply('tmpdel:'.$logtoken,$server);
             unless ($reply eq 'ok') {              unless ($reply eq 'ok') {
                 $msg .= &mt('Request could not be processed.');                  $msg .= &mt('Request could not be processed.');
             }              }
         }          }
   # Check if the password entered by the user satisfies domain's requirements
           my %passwdconf = &Apache::lonnet::get_passwdconf($domain);
           my ($min,$max,@chars);
           $min = $Apache::lonnet::passwdmin;
           if (ref($passwdconf{'chars'}) eq 'ARRAY') {
               if ($passwdconf{'min'} =~ /^\d+$/) {
                   if ($passwdconf{'min'} > $min) {
                       $min = $passwdconf{'min'};
                   }
               }
               if ($passwdconf{'max'} =~ /^\d+$/) {
                   $max = $passwdconf{'max'};
               }
               @chars = @{$passwdconf{'chars'}};
           }
           my $encpass = $env{'form.upass'};
           if ($encpass eq '') {
               $msg = &mt('Password retrieved was blank.').
                      '<br /><p>'.&mt('[_1]Return[_2] to the previous page to try again.',
                                      '<a href="javascript:document.retryemail.submit();">','</a>');
               $earlyout = 1;
           } else {
   # Split the logtoken to retrieve the DES key and decrypt the encypted password
               my ($key,$caller)=split(/&/,$tmpinfo);
               if ($caller eq 'createaccount') {
                   my $plainpass = &Apache::loncommon::des_decrypt($key,$encpass);
                   if (($min > 0) || ($max ne '') || (@chars > 0)) {
                       my $warning = &Apache::loncommon::check_passwd_rules($domain,$plainpass);
                       if ($warning) {
                           $msg = $warning.
                                  '<p>'.&mt('[_1]Return[_2] to the previous page to try again.',
                                            '<a href="javascript:document.retryemail.submit();">','</a>');
                           $earlyout = 1;
                       }
                   }
               }
           }
           if ($earlyout) {
               $msg .= '<form name="retryemail" action="/adm/createaccount" method="post" />'.
                       '<input type="hidden" name="domain" value="'.$domain.'" />'."\n";
               if ($env{'form.courseid'} =~ /^$match_domain\_$match_courseid$/) {
                   $msg .= '<input type="hidden" name="courseid" value="'.$env{'form.courseid'}.'" />'."\n";
               }
               if ($env{'form.type'}) {
                   my $usertype = &get_usertype($domain);
                   if ($usertype ne '') {
                       $msg .= '<input type="hidden" name="type" value="'.$usertype.'" />'.
                               '<input type="hidden" name="reportedtype" value="'.&mt('Submit').'" />'."\n";
                   }
               }
               $msg .= '</form></p>';
               return $msg;
           }
         my %info = ('ip'         => $ENV{'REMOTE_ADDR'},          my %info = ('ip'         => $ENV{'REMOTE_ADDR'},
                     'time'       => $now,                      'time'       => $now,
                     'domain'     => $domain,                      'domain'     => $domain,
Line 747  sub send_token { Line 991  sub send_token {
                     'upass'      => $env{'form.upass'},                      'upass'      => $env{'form.upass'},
                     'serverid'   => $env{'form.serverid'},                      'serverid'   => $env{'form.serverid'},
                     'tmpinfo'    => $tmpinfo);                      'tmpinfo'    => $tmpinfo);
           if ($uname ne '') {
               $info{'username'} = $uname;
               $info{'email'} = $email;
           }
         if (ref($emailusername) eq 'HASH') {          if (ref($emailusername) eq 'HASH') {
             if (ref($emailusername->{$usertype}) eq 'HASH') {              if (ref($emailusername->{$usertype}) eq 'HASH') {
                 foreach my $item (keys(%{$emailusername->{$usertype}})) {                  foreach my $item (keys(%{$emailusername->{$usertype}})) {
                     $info{$item} = $env{'form.'.$item};                      $info{$item} = $env{'form.'.$item};
                     $info{$item} =~ s/(`)//g;                      $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');          my $token = &Apache::lonnet::tmpput(\%info,$server,'createaccount');
         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);
Line 792  sub send_token { Line 1039  sub send_token {
   
 sub process_mailtoken {  sub process_mailtoken {
     my ($r,$token,$contact_name,$contact_email,$domain,$domdesc,$lonhost,      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 ($msg,$nostart,$noend,$redirect);
     my %data = &Apache::lonnet::tmpget($token);      my %data = &Apache::lonnet::tmpget($token);
     my $now = time;      my $now = time;
Line 805  sub process_mailtoken { Line 1052  sub process_mailtoken {
     }      }
     if (($data{'time'} =~ /^\d+$/) &&      if (($data{'time'} =~ /^\d+$/) &&
         ($data{'domain'} ne '') &&          ($data{'domain'} ne '') &&
         ($data{'username'}  =~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/)) {          ((($data{'email'} =~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/) && ($data{'username'} =~ /^$match_username$/)) ||
             ($data{'username'}  =~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/))) {
         if ($now - $data{'time'} < 7200) {          if ($now - $data{'time'} < 7200) {
 # Check if request should be queued.  # Check if request should be queued.
             if (ref($cancreate) eq 'ARRAY') {              if (ref($cancreate) eq 'ARRAY') {
                 my $disposition;                  my ($disposition,$usertype);
                 if (grep(/^email$/,@{$cancreate})) {                  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 {
                                   $disposition = 'approval';
                               }
                           }
                           delete($data{'usertype'});
                       }
                     if (ref($settings) eq 'HASH') {                      if (ref($settings) eq 'HASH') {
                         if (ref($settings->{'cancreate'}) eq 'HASH') {                          if (ref($settings->{'cancreate'}) eq 'HASH') {
                             if (ref($settings->{'cancreate'}{'selfcreateprocessing'}) eq 'HASH') {                              if (ref($settings->{'cancreate'}{'selfcreateprocessing'}) eq 'HASH') {
                                 $disposition = $settings->{'cancreate'}{'selfcreateprocessing'}{$usertype};                                   if ($usertype ne '') {
                                       $disposition = $settings->{'cancreate'}{'selfcreateprocessing'}{$usertype};
                                       unless ($disposition =~ /^(approval|automatic)$/) {
                                           $disposition = 'approval';
                                       }
                                   }
                             }                              }
                         }                          }
                     }                      }
Line 893  sub start_session { Line 1166  sub start_session {
 #  #
 sub print_dataentry_form {  sub print_dataentry_form {
     my ($r,$domain,$lonhost,$include,$now,$captchaform,$courseid,$emailusername,$captcha,      my ($r,$domain,$lonhost,$include,$now,$captchaform,$courseid,$emailusername,$captcha,
         $usertype,$recaptchaversion) = @_;          $usertype,$recaptchaversion,$usernameset,$condition,$excluded) = @_;
     my ($error,$output);      my ($error,$output);
     if (open(my $jsh,"<$include/londes.js")) {      if (open(my $jsh,"<","$include/londes.js")) {
         while(my $line = <$jsh>) {          while(my $line = <$jsh>) {
             $r->print($line);              $r->print($line);
         }          }
         close($jsh);          close($jsh);
         $output = &javascript_setforms($now,$emailusername,$captcha,$usertype,$recaptchaversion).          $output = &javascript_setforms($now,$emailusername,$captcha,$usertype,$recaptchaversion,
                   "\n".&javascript_checkpass($now,'email');                                         $usernameset,$condition,$excluded).
                     "\n".&javascript_checkpass($now,'email',$domain);
         my ($lkey,$ukey) = &Apache::loncommon::des_keys();          my ($lkey,$ukey) = &Apache::loncommon::des_keys();
         my ($lextkey,$uextkey) = &getkeys($lkey,$ukey);          my ($lextkey,$uextkey) = &getkeys($lkey,$ukey);
         my $logtoken=Apache::lonnet::reply('tmpput:'.$ukey.$lkey.'&createaccount:createaccount',          my $logtoken=Apache::lonnet::reply('tmpput:'.$ukey.$lkey.'&createaccount:createaccount',
Line 916  sub print_dataentry_form { Line 1190  sub print_dataentry_form {
                 foreach my $field (sort(keys(%{$emailusername->{$usertype}}))) {                  foreach my $field (sort(keys(%{$emailusername->{$usertype}}))) {
                     $output .= '<input type="hidden" name="'.$field.'" value="" />'."\n";                      $output .= '<input type="hidden" name="'.$field.'" value="" />'."\n";
                 }                  }
                 $output .= '<input type="hidden" name="type" value="" />'."\n";  
             }              }
         }          }
         if ($captcha eq 'original') {          if ($captcha eq 'original') {
Line 935  sub print_dataentry_form { Line 1208  sub print_dataentry_form {
 ';  ';
             }              }
         }          }
           if ($usertype ne '') {
               $output .= '<input type="hidden" name="type" value="'.
                          &HTML::Entities::encode($usertype,'\'<>"&').'" />'."\n";
           }
           if ($usernameset eq 'free') {
               $output .= '<input type="hidden" name="username" value="" />'."\n"; 
           }
         $output .= <<"ENDSERVERFORM";          $output .= <<"ENDSERVERFORM";
    <input type="hidden" name="logtoken" value="$logtoken" />     <input type="hidden" name="logtoken" value="$logtoken" />
    <input type="hidden" name="serverid" value="$lonhost" />     <input type="hidden" name="serverid" value="$lonhost" />
Line 955  ENDSERVERFORM Line 1235  ENDSERVERFORM
         my ($datatable,$rowcount) =          my ($datatable,$rowcount) =
             &Apache::loncreateuser::personal_data_display('',$domain,'email','selfcreate',              &Apache::loncreateuser::personal_data_display('',$domain,'email','selfcreate',
                                                           '','',$now,$captchaform,                                                            '','',$now,$captchaform,
                                                           $emailusername,$usertype);                                                            $emailusername,$usertype,
                                                             $usernameset,$condition,$excluded);
         if ($rowcount) {          if ($rowcount) {
             $output .= '<div class="LC_left_float">'.$beginclientform.$datatable.$endclientform;              $output .= '<div class="LC_left_float">'.$beginclientform.$datatable.$endclientform;
         } else {          } else {
Line 977  ENDSERVERFORM Line 1258  ENDSERVERFORM
   
 sub get_creation_controls {  sub get_creation_controls {
     my ($domain,$usercreation) = @_;      my ($domain,$usercreation) = @_;
     my (@cancreate,@statustocreate,$emailusername);      my (@cancreate,@statustocreate,@statusforemail,$emailusername,$processing,
           $emailoptions,$verification,$emaildomain,$othertitle,$usertypes,$types);
     if (ref($usercreation) eq 'HASH') {      if (ref($usercreation) eq 'HASH') {
         if (ref($usercreation->{'cancreate'}) eq 'HASH') {          if (ref($usercreation->{'cancreate'}) eq 'HASH') {
               ($othertitle,$usertypes,$types) =
                   &Apache::loncommon::sorted_inst_types($domain);
             if (ref($usercreation->{'cancreate'}{'statustocreate'}) eq 'ARRAY') {              if (ref($usercreation->{'cancreate'}{'statustocreate'}) eq 'ARRAY') {
                 @statustocreate = @{$usercreation->{'cancreate'}{'statustocreate'}};                  @statustocreate = @{$usercreation->{'cancreate'}{'statustocreate'}};
                 if (@statustocreate == 0) {                  if (@statustocreate == 0) {
                     my ($othertitle,$usertypes,$types) =  
                         &Apache::loncommon::sorted_inst_types($domain);  
                     if (ref($types) eq 'ARRAY') {                      if (ref($types) eq 'ARRAY') {
                         if (@{$types} == 0) {                          if (@{$types} == 0) {
                             @statustocreate = ('default');                              @statustocreate = ('default');
Line 995  sub get_creation_controls { Line 1277  sub get_creation_controls {
                 }                  }
             } else {              } else {
                 @statustocreate = ('default');                  @statustocreate = ('default');
                 my ($othertitle,$usertypes,$types) =  
                     &Apache::loncommon::sorted_inst_types($domain);  
                 if (ref($types) eq 'ARRAY') {                  if (ref($types) eq 'ARRAY') {
                     push(@statustocreate,@{$types});                      push(@statustocreate,@{$types});
                 }                  }
Line 1007  sub get_creation_controls { Line 1287  sub get_creation_controls {
                      ($usercreation->{'cancreate'}{'selfcreate'} ne '')) {                       ($usercreation->{'cancreate'}{'selfcreate'} ne '')) {
                 @cancreate = ($usercreation->{'cancreate'}{'selfcreate'});                  @cancreate = ($usercreation->{'cancreate'}{'selfcreate'});
             }              }
               if (grep(/^email$/,@cancreate)) {
                   if (ref($usercreation->{'cancreate'}{'selfcreateprocessing'}) eq 'HASH') {
                       $processing = $usercreation->{'cancreate'}{'selfcreateprocessing'};
                   }
                   if (ref($usercreation->{'cancreate'}{'emailoptions'}) eq 'HASH') {
                       $emailoptions = $usercreation->{'cancreate'}{'emailoptions'};
                   }
                   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') {
                           @statusforemail = @{$domdefaults{'inststatusguest'}};
                           unless (@statusforemail) {
                               my @okcreate;
                               foreach my $poss (@cancreate) {
                                   unless ($poss eq 'email') {
                                        push(@okcreate,$poss);
                                   }
                               }
                               @cancreate = @okcreate;
                           }
                       }
                   }  
               }
             if (ref($usercreation->{'cancreate'}{'emailusername'}) eq 'HASH') {              if (ref($usercreation->{'cancreate'}{'emailusername'}) eq 'HASH') {
                 $emailusername = $usercreation->{'cancreate'}{'emailusername'};                  $emailusername = $usercreation->{'cancreate'}{'emailusername'};
             } else {              } else {
Line 1019  sub get_creation_controls { Line 1329  sub get_creation_controls {
             }              }
         }          }
     }      }
     return (\@cancreate,\@statustocreate,$emailusername);      return (\@cancreate,\@statustocreate,\@statusforemail,$emailusername,
               $emailoptions,$verification,$emaildomain,$types,$usertypes,$othertitle);
 }  }
   
 sub create_account {  sub create_account {
Line 1032  sub create_account { Line 1343  sub create_account {
     my $output;      my $output;
     if (ref($dataref) eq 'HASH') {      if (ref($dataref) eq 'HASH') {
         my ($username,$encpass,$serverid,$courseid,$id,$firstname,$middlename,$lastname,          my ($username,$encpass,$serverid,$courseid,$id,$firstname,$middlename,$lastname,
             $generation,$inststatus);              $generation,$inststatus,$permanentemail);
         $username   = $dataref->{'username'};          $username   = $dataref->{'username'};
         $encpass    = $dataref->{'upass'};          $encpass    = $dataref->{'upass'};
         $serverid   = $dataref->{'serverid'};          $serverid   = $dataref->{'serverid'};
Line 1044  sub create_account { Line 1355  sub create_account {
         $generation = $dataref->{'generation'};          $generation = $dataref->{'generation'};
         $inststatus = $dataref->{'inststatus'};          $inststatus = $dataref->{'inststatus'};
   
           if ($dataref->{'email'} ne '') {
               $permanentemail = $dataref->{'email'};
           } else {
               $permanentemail = $dataref->{'username'};
           }
         my $currhome = &Apache::lonnet::homeserver($username,$domain);          my $currhome = &Apache::lonnet::homeserver($username,$domain);
         unless ($currhome eq 'no_host') {          unless ($currhome eq 'no_host') {
             $output = &mt('User account requested for username: [_1] in domain: [_2] already exists.',$username,$domain);              $output = &mt('User account requested for username: [_1] in domain: [_2] already exists.',$username,$domain);
Line 1054  sub create_account { Line 1370  sub create_account {
   
         my ($key,$caller)=split(/&/,$dataref->{'tmpinfo'});          my ($key,$caller)=split(/&/,$dataref->{'tmpinfo'});
         if ($caller eq 'createaccount') {          if ($caller eq 'createaccount') {
             my $upass = &Apache::loncommon::des_decrypt($key,$encpass);              my $upass;
               if ($encpass eq '') {
                   $output = &mt('Password retrieved was blank.');
                   return ('fail',$error.$output.$end.$rtnlink);
               } else {
                   $upass = &Apache::loncommon::des_decrypt($key,$encpass);
               }
   
 # See if we are allowed to use the proposed student/employee ID,  # See if we are allowed to use the proposed student/employee ID,
 # as per domain rules; if not, student/employee will be left blank.  # as per domain rules; if not, student/employee will be left blank.
Line 1075  sub create_account { Line 1397  sub create_account {
             my $result =              my $result =
                 &Apache::lonnet::modifyuser($domain,$username,$id,                  &Apache::lonnet::modifyuser($domain,$username,$id,
                                             'internal',$upass,$firstname,$middlename,                                              'internal',$upass,$firstname,$middlename,
                                             $lastname,$generation,undef,undef,$username);                                              $lastname,$generation,undef,undef,$permanentemail);
             $output = &mt('Generating user: [_1]',$result);              $output = &mt('Generating user: [_1]',$result);
   
 # Now that the user account exists, retrieve the homeserver, and include it in the output.  # Now that the user account exists, retrieve the homeserver, and include it in the output.
Line 1461  sub invalid_state { Line 1783  sub invalid_state {
         $msg .= &mt('Username rules at this institution 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 at this LON-CAPA institution.');          $msg .= &mt('The e-mail address you provided may not be used as a username at this LON-CAPA institution.');
     } elsif ($error eq 'captcha') {  
         $msg .= &mt('Validation of the code you 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 at this LON-CAPA institution.');          $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 .= '</span>';      $msg .= '</span>';
     if ($msgtext) {      if ($msgtext) {
Line 1597  sub store_request { Line 1919  sub store_request {
 }  }
   
 sub guest_format_check {  sub guest_format_check {
     my ($useremail,$domain,$cancreate,$settings) = @_;      my ($useremail,$domain,$cancreate,$settings,$usertype) = @_;
     my ($login,$format_match,$format_msg,@user_rules);      my ($login,$format_match,$format_msg,@user_rules);
     if (ref($settings) eq 'HASH') {      if (ref($settings) eq 'HASH') {
         if (ref($settings->{'email_rule'}) eq 'ARRAY') {          if (ref($settings->{'email_rule'}) eq 'ARRAY') {
             push(@user_rules,@{$settings->{'email_rule'}});              push(@user_rules,@{$settings->{'email_rule'}});
           } elsif (ref($settings->{'email_rule'}) eq 'HASH') {
               if (ref($settings->{'email_rule'}->{$usertype}) eq 'ARRAY') {
                   push(@user_rules,@{$settings->{'email_rule'}->{$usertype}});
               }
         }          }
     }      }
     if (@user_rules > 0) {      if (@user_rules > 0) {
Line 1637  sub sso_logout_frag { Line 1963  sub sso_logout_frag {
     if (defined($r->dir_config('lonSSOUserLogoutMessageFile_'.$domain))) {      if (defined($r->dir_config('lonSSOUserLogoutMessageFile_'.$domain))) {
         my $msgfile = $r->dir_config('lonSSOUserLogoutMessageFile_'.$domain);          my $msgfile = $r->dir_config('lonSSOUserLogoutMessageFile_'.$domain);
         if (-e $msgfile) {          if (-e $msgfile) {
             open(my $fh,"<$msgfile");              open(my $fh,"<",$msgfile);
             $endsessionmsg = join('',<$fh>);              $endsessionmsg = join('',<$fh>);
             close($fh);              close($fh);
         }          }
     } elsif (defined($r->dir_config('lonSSOUserLogoutMessageFile'))) {      } elsif (defined($r->dir_config('lonSSOUserLogoutMessageFile'))) {
         my $msgfile = $r->dir_config('lonSSOUserLogoutMessageFile');          my $msgfile = $r->dir_config('lonSSOUserLogoutMessageFile');
         if (-e $msgfile) {               if (-e $msgfile) {     
             open(my $fh,"<$msgfile");              open(my $fh,"<",$msgfile);
             $endsessionmsg = join('',<$fh>);              $endsessionmsg = join('',<$fh>);
             close($fh);              close($fh);
         }          }
Line 1705  function getFormByName(item) { Line 2031  function getFormByName(item) {
 }  }
 // ]]>  // ]]>
 </script>  </script>
   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";
   <script type="text/javascript">
   // <![CDATA[
   
   function setElements() {
       if (document.getElementById('LC_reportstatus')) {
           var reportnum = document.reportstatus.type.length;
           if ((reportnum != 'undefined') && (typeof(document.reportstatus.type) != 'undefined')) {
               for (var i=0; i<reportnum; i++) {
                   document.reportstatus.type[i].checked = false;
               }
           }
       }
   }
   
   function checkVerification() {
       var curr;
       var cancreate = false;
       var reportnum = document.reportstatus.type.length;
       if ((reportnum == 'undefined') && (typeof(document.reportstatus.type) != 'undefined')) {
           curr = document.reportstatus.type.value; 
       } else if (document.reportstatus.type.length) {
           for (var i=0; i<document.reportstatus.type.length; i++) {
               if (document.reportstatus.type[i].checked) {
                   curr = document.reportstatus.type[i].value;
                   break;
               }
           }
       }
       var types = Array('$posstypes');
       var names = Array('$posstypesnames');
       var available = Array('$availabletypes');
       if (available.length) {
           for (var i=0; i<available.length; i++) {
               if (curr == available[i]) {
                   cancreate = true;   
                   break;
               }
           }
       }
       if (types.length > 0) {
           for (var j=0; j<types.length; j++) {
               if (curr == types[j]) {
                   if (!cancreate) {
                       alert('Creation of an account via verification by e-mail unavailable for user type: "'+names[j]+'"');
                       setElements();
                   }
                   break;
               }
           }
       }
       if (cancreate) {
           return true;
       } else {
           return false;
       }
   }
   
   // ]]>
   </script>
   ENDSCRIPT
   
   }
   
   sub username_js {
       return  <<"ENDSCRIPT";
   <script type="text/javascript">
   // <![CDATA[
   
   function toggleUsernameDisp(caller,divid) {
       if (document.getElementById(divid)) {
           if (caller.checked) {
               if (caller.value == '1') {
                   document.getElementById(divid).style.display = 'none';
               } else {
                   document.getElementById(divid).style.display = 'inline';
               }
           }
       }
   }
   // ]]>
   </script>
 ENDSCRIPT  ENDSCRIPT
   
 }  }

Removed from v.1.72  
changed lines
  Added in v.1.72.4.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>