Diff for /loncom/interface/lonuserutils.pm between versions 1.184.4.10.2.1 and 1.195

version 1.184.4.10.2.1, 2022/02/20 19:48:31 version 1.195, 2019/04/29 22:19:24
Line 438  sub javascript_validations { Line 438  sub javascript_validations {
             } elsif ($context eq 'domain') {              } elsif ($context eq 'domain') {
                 $setsection_call = 'setCourse()';                  $setsection_call = 'setCourse()';
                 $setsections_js = &dc_setcourse_js($param{'formname'},$mode,                  $setsections_js = &dc_setcourse_js($param{'formname'},$mode,
                                                    $context,$showcredits,$domain);                                                     $context,$showcredits);
             }              }
             $finish = "  var checkSec = $setsection_call\n".              $finish = "  var checkSec = $setsection_call\n".
                       "  if (checkSec == 'ok') {\n".                        "  if (checkSec == 'ok') {\n".
Line 531  END Line 531  END
 /* regexp here to check for non \d \. in credits */  /* regexp here to check for non \d \. in credits */
 END  END
     } else {      } else {
         my ($numrules,$intargjs) =  
             &Apache::loncommon::passwd_validation_js('vf.elements[current.argfield].value',$domain);  
         $auth_checks .= (<<END);          $auth_checks .= (<<END);
     foundatype=1;      foundatype=1;
     if (current.argfield == null || current.argfield == '') {      if (current.argfield == null || current.argfield == '') {
         // The login radiobutton checked does not have an associated textbox  
     } else if (vf.elements[current.argfield].value == '') {  
         var alertmsg = '';          var alertmsg = '';
         switch (current.radiovalue) {          switch (current.radiovalue) {
             case 'krb':              case 'krb':
                 alertmsg = '$alert{'krb'}';                  alertmsg = '$alert{'krb'}';
                 break;                  break;
             case 'int':              case 'loc':
                 alertmsg = '$alert{'ipass'}';  
                 break;  
             case 'fsys':              case 'fsys':
                 alertmsg = '$alert{'ipass'}';                  alertmsg = '$alert{'ipass'}';
                 break;                  break;
             case 'loc':              case 'fsys':
                 alertmsg = '';                  alertmsg = '';
                 break;                  break;
               case 'lti':
             default:              default:
                 alertmsg = '';                  alertmsg = '';
         }          }
Line 559  END Line 554  END
             alert(alertmsg);              alert(alertmsg);
             return;              return;
         }          }
     } else if (current.radiovalue == 'int') {  
         if ($numrules > 0) {  
 $intargjs  
         }  
     }      }
 END  END
     }      }
Line 651  END Line 642  END
                  $section_checks.$authheader;                   $section_checks.$authheader;
     return $result;      return $result;
 }  }
   
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
 sub upload_manager_javascript_forward_associate {  sub upload_manager_javascript_forward_associate {
Line 909  sub print_upload_manager_footer { Line 899  sub print_upload_manager_footer {
     my $krbform = &Apache::loncommon::authform_kerberos(%param);      my $krbform = &Apache::loncommon::authform_kerberos(%param);
     my $intform = &Apache::loncommon::authform_internal(%param);      my $intform = &Apache::loncommon::authform_internal(%param);
     my $locform = &Apache::loncommon::authform_local(%param);      my $locform = &Apache::loncommon::authform_local(%param);
       my $ltiform = &Apache::loncommon::authform_lti(%param);
     my $date_table = &date_setting_table(undef,undef,$context,undef,      my $date_table = &date_setting_table(undef,undef,$context,undef,
                                          $formname,$permission,$crstype);                                           $formname,$permission,$crstype);
   
Line 937  sub print_upload_manager_footer { Line 928  sub print_upload_manager_footer {
             &Apache::loncommon::help_open_topic('Auth_Options').              &Apache::loncommon::help_open_topic('Auth_Options').
             "</p>\n";              "</p>\n";
     }      }
     $Str .= &set_login($defdom,$krbform,$intform,$locform);      $Str .= &set_login($defdom,$krbform,$intform,$locform,$ltiform);
   
     my ($home_server_pick,$numlib) =      my ($home_server_pick,$numlib) =
         &Apache::loncommon::home_server_form_item($defdom,'lcserver',          &Apache::loncommon::home_server_form_item($defdom,'lcserver',
Line 954  sub print_upload_manager_footer { Line 945  sub print_upload_manager_footer {
                 &Apache::lonhtmlcommon::row_closure();                  &Apache::lonhtmlcommon::row_closure();
     }      }
   
       my ($trusted,$untrusted);
       if ($context eq 'course') {
           ($trusted,$untrusted) = &Apache::lonnet::trusted_domains('enroll',$defdom);
       } elsif ($context eq 'author') {
           ($trusted,$untrusted) = &Apache::lonnet::trusted_domains('othcoau',$defdom);
       }
     $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain'))      $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain'))
            .&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1)             .&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1,undef,$trusted,$untrusted)
            .&Apache::lonhtmlcommon::row_closure();             .&Apache::lonhtmlcommon::row_closure();
   
     $Str .= &Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates'))      $Str .= &Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates'))
Line 2298  sub build_user_record { Line 2295  sub build_user_record {
   
 sub courses_selector {  sub courses_selector {
     my ($cdom,$formname) = @_;      my ($cdom,$formname) = @_;
       my %coursecodes = ();
     my %codes = ();      my %codes = ();
     my @codetitles = ();      my @codetitles = ();
     my %cat_titles = ();      my %cat_titles = ();
Line 2310  sub courses_selector { Line 2308  sub courses_selector {
     my $jscript = '';      my $jscript = '';
   
     my $totcodes = 0;      my $totcodes = 0;
     my $instcats = &Apache::lonnet::get_dom_instcats($cdom);      $totcodes =
     if (ref($instcats) eq 'HASH') {          &Apache::courseclassifier::retrieve_instcodes(\%coursecodes,
         if ((ref($instcats->{'codetitles'}) eq 'ARRAY') && (ref($instcats->{'codes'}) eq 'HASH') &&                                                        $cdom,$totcodes);
             (ref($instcats->{'cat_titles'}) eq 'HASH') && (ref($instcats->{'cat_order'}) eq 'HASH')) {      if ($totcodes > 0) {
             %codes = %{$instcats->{'codes'}};          $format_reply =
             @codetitles = @{$instcats->{'codetitles'}};               &Apache::lonnet::auto_instcode_format($caller,$cdom,\%coursecodes,
             %cat_titles = %{$instcats->{'cat_titles'}};                                  \%codes,\@codetitles,\%cat_titles,\%cat_order);
             %cat_order = %{$instcats->{'cat_order'}};          if ($format_reply eq 'ok') {
             $totcodes = scalar(keys(%codes));  
             my $numtypes = @codetitles;              my $numtypes = @codetitles;
             &Apache::courseclassifier::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles);              &Apache::courseclassifier::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles);
             my ($scripttext,$longtitles) = &Apache::courseclassifier::javascript_definitions(\@codetitles,\%idlist,\%idlist_titles,\%idnums,\%cat_titles);              my ($scripttext,$longtitles) = &Apache::courseclassifier::javascript_definitions(\@codetitles,\%idlist,\%idlist_titles,\%idnums,\%cat_titles);
Line 3532  END Line 3529  END
         setSections(formname,'$crstype');          setSections(formname,'$crstype');
         if (seccheck == 'ok') {          if (seccheck == 'ok') {
             opener.document.$callingform.newsecs.value = formname.sections.value;              opener.document.$callingform.newsecs.value = formname.sections.value;
         } else {  
             return;  
         }          }
 END  END
     } else {      } else {
Line 4118  sub print_first_users_upload_form { Line 4113  sub print_first_users_upload_form {
            .&Apache::lonhtmlcommon::end_pick_box();             .&Apache::lonhtmlcommon::end_pick_box();
   
     $str .= '<p>'      $str .= '<p>'
            .'<input type="button" name="fileupload" value="'.&mt('Next').'"'             .'<input type="submit" name="fileupload" value="'.&mt('Next').'"'
            .' onclick="javascript:checkUpload(this.form);" />'             .' onclick="javascript:checkUpload(this.form);" />'
            .'</p>';             .'</p>';
   
Line 4159  sub upfile_drop_add { Line 4154  sub upfile_drop_add {
         $fieldstype{$field.'_choice'} = 'scalar';          $fieldstype{$field.'_choice'} = 'scalar';
     }      }
     &Apache::loncommon::store_course_settings('enrollment_upload',\%fieldstype);      &Apache::loncommon::store_course_settings('enrollment_upload',\%fieldstype);
     my ($cid,$crstype,$setting);      my ($cid,$crstype,$setting,$crsdom);
     if ($context eq 'domain') {      if ($context eq 'domain') {
         $setting = $env{'form.roleaction'};          $setting = $env{'form.roleaction'};
     }      }
     if ($env{'request.course.id'} ne '') {      if ($env{'request.course.id'} ne '') {
         $cid = $env{'request.course.id'};          $cid = $env{'request.course.id'};
         $crstype = &Apache::loncommon::course_type();          $crstype = &Apache::loncommon::course_type();
           $crsdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     } elsif ($setting eq 'course') {      } elsif ($setting eq 'course') {
         if (&Apache::lonnet::is_course($env{'form.dcdomain'},$env{'form.dccourse'})) {          if (&Apache::lonnet::is_course($env{'form.dcdomain'},$env{'form.dccourse'})) {
             $cid = $env{'form.dcdomain'}.'_'.$env{'form.dccourse'};              $cid = $env{'form.dcdomain'}.'_'.$env{'form.dccourse'};
             $crstype = &Apache::loncommon::course_type($cid);              $crstype = &Apache::loncommon::course_type($cid);
               $crsdom = $env{'form.dcdomain'};
         }          }
     }      }
     my ($startdate,$enddate) = &get_dates_from_form();      my ($startdate,$enddate) = &get_dates_from_form();
Line 4180  sub upfile_drop_add { Line 4177  sub upfile_drop_add {
     my $defdom=$env{'request.role.domain'};      my $defdom=$env{'request.role.domain'};
     my $domain;      my $domain;
     if ($env{'form.defaultdomain'} ne '') {      if ($env{'form.defaultdomain'} ne '') {
         $domain = $env{'form.defaultdomain'};          if (($context eq 'course') || ($setting eq 'course')) {
               if ($env{'form.defaultdomain'} eq $crsdom) {
                   $domain = $env{'form.defaultdomain'};
               } else {
                   if (&Apache::lonnet::will_trust('enroll',$crsdom,$env{'form.defaultdomain'})) {
                       $domain = $env{'form.defaultdomain'};
                   } else {
                       $r->print('<span class="LC_error">'.&mt('Error').': '.
                                 &mt('Enrollment of users not permitted for specified default domain: [_1].',
                                     &Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>');
                       return 'untrusted';
                   }
               }
           } elsif ($context eq 'author') {
               if ($env{'form.defaultdomain'} eq $defdom) {
                   $domain = $env{'form.defaultdomain'}; 
               } else {
                   if ((&Apache::lonnet::will_trust('othcoau',$defdom,$env{'form.defaultdomain'})) &&
                       (&Apache::lonnet::will_trust('coaurem',$env{'form.defaultdomain'},$defdom))) {
                       $domain = $env{'form.defaultdomain'};
                   } else {
                       $r->print('<span class="LC_error">'.&mt('Error').': '.
                                 &mt('Addition of users not permitted for specified default domain: [_1].',
                                     &Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>');
                       return 'untrusted';
                   }
               }
           } elsif (($context eq 'domain') && ($setting eq 'domain')) {
               if ($env{'form.defaultdomain'} eq $defdom) {
                   $domain = $env{'form.defaultdomain'};
               } else {
                   if (&Apache::lonnet::will_trust('domroles',$defdom,$env{'form.defaultdomain'})) {
                       $domain = $env{'form.defaultdomain'};
                   } else {
                       $r->print('<span class="LC_error">'.&mt('Error').': '.
                                 &mt('Addition of users not permitted for specified default domain: [_1].',
                                     &Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>');
                       return 'untrusted';
                   }
               }
           }
     } else {      } else {
         $domain = $defdom;          $domain = $defdom;
     }      }
Line 4192  sub upfile_drop_add { Line 4229  sub upfile_drop_add {
         if (! exists($home_servers{$desiredhost})) {          if (! exists($home_servers{$desiredhost})) {
             $r->print('<p class="LC_error">'.&mt('Error').': '.              $r->print('<p class="LC_error">'.&mt('Error').': '.
                       &mt('Invalid home server specified').'</p>');                        &mt('Invalid home server specified').'</p>');
             $r->print(&Apache::loncommon::end_page());  
             return 'invalidhome';              return 'invalidhome';
         }          }
     }      }
Line 4203  sub upfile_drop_add { Line 4239  sub upfile_drop_add {
     }      }
     my $amode  = '';      my $amode  = '';
     my $genpwd = '';      my $genpwd = '';
     my @genpwdfail;  
     if ($env{'form.login'} eq 'krb') {      if ($env{'form.login'} eq 'krb') {
         $amode='krb';          $amode='krb';
         $amode.=$env{'form.krbver'};          $amode.=$env{'form.krbver'};
Line 4212  sub upfile_drop_add { Line 4247  sub upfile_drop_add {
         $amode='internal';          $amode='internal';
         if ((defined($env{'form.intarg'})) && ($env{'form.intarg'})) {          if ((defined($env{'form.intarg'})) && ($env{'form.intarg'})) {
             $genpwd=$env{'form.intarg'};              $genpwd=$env{'form.intarg'};
             @genpwdfail =  
                 &Apache::loncommon::check_passwd_rules($domain,$genpwd);  
         }          }
     } elsif ($env{'form.login'} eq 'loc') {      } elsif ($env{'form.login'} eq 'loc') {
         $amode='localauth';          $amode='localauth';
         if ((defined($env{'form.locarg'})) && ($env{'form.locarg'})) {          if ((defined($env{'form.locarg'})) && ($env{'form.locarg'})) {
             $genpwd=$env{'form.locarg'};              $genpwd=$env{'form.locarg'};
         }          }
       } elsif ($env{'form.login'} eq 'lti') {
           $amode='lti';
     }      }
     if ($amode =~ /^krb/) {      if ($amode =~ /^krb/) {
         if (! defined($genpwd) || $genpwd eq '') {          if (! defined($genpwd) || $genpwd eq '') {
Line 4292  sub upfile_drop_add { Line 4327  sub upfile_drop_add {
                                                   \@statuses,\@poss_roles);                                                    \@statuses,\@poss_roles);
                 &gather_userinfo($context,'view',\%userlist,$indexhash,\%info,                  &gather_userinfo($context,'view',\%userlist,$indexhash,\%info,
                              \%cstr_roles,$permission);                               \%cstr_roles,$permission);
   
             }              }
         }          }
     }      }
Line 4369  sub upfile_drop_add { Line 4405  sub upfile_drop_add {
         my $newuserdom = $env{'request.role.domain'};          my $newuserdom = $env{'request.role.domain'};
         map { $cancreate{$_} = &can_create_user($newuserdom,$context,$_); } keys(%longtypes);          map { $cancreate{$_} = &can_create_user($newuserdom,$context,$_); } keys(%longtypes);
         # Get new users list          # Get new users list
         my (%existinguser,%userinfo,%disallow,%rulematch,%inst_results,%alerts,%checkuname,          my (%existinguser,%userinfo,%disallow,%rulematch,%inst_results,%alerts,%checkuname);
             %showpasswdrules,$haspasswdmap);  
         my $counter = -1;          my $counter = -1;
           my (%willtrust,%trustchecked);
         foreach my $line (@userdata) {          foreach my $line (@userdata) {
             $counter ++;              $counter ++;
             my @secs;              my @secs;
Line 4419  sub upfile_drop_add { Line 4455  sub upfile_drop_add {
                                 '"<b>'.$entries{$fields{'domain'}}.'</b>"',                                  '"<b>'.$entries{$fields{'domain'}}.'</b>"',
                                 $fname,$mname,$lname,$gen);                                  $fname,$mname,$lname,$gen);
                         next;                          next;
                       } elsif ($entries{$fields{'domain'}} ne $domain) {
                           my $possdom = $entries{$fields{'domain'}};
                           if ($context eq 'course' || $setting eq 'course') {
                               unless ($trustchecked{$possdom}) {
                                   $willtrust{$possdom} = &Apache::lonnet::will_trust('enroll',$domain,$possdom);
                                   $trustchecked{$possdom} = 1;
                               }
                           } elsif ($context eq 'author') {
                               unless ($trustchecked{$possdom}) {
                                   $willtrust{$possdom} = &Apache::lonnet::will_trust('othcoau',$domain,$possdom);
                               }
                               if ($willtrust{$possdom}) {
                                   $willtrust{$possdom} = &Apache::lonnet::will_trust('coaurem',$possdom,$domain); 
                               }
                           }
                           unless ($willtrust{$possdom}) {
                               $disallow{$counter} =
                                   &mt('Unacceptable domain [_1] for user [_2] [_3] [_4] [_5]',
                                       '"<b>'.$possdom.'</b>"',
                                       $fname,$mname,$lname,$gen);
                               next;
                           }
                     }                      }
                     my $username = $entries{$fields{'username'}};                      my $username = $entries{$fields{'username'}};
                     my $userdomain = $entries{$fields{'domain'}};                      my $userdomain = $entries{$fields{'domain'}};
Line 4498  sub upfile_drop_add { Line 4556  sub upfile_drop_add {
                         }                          }
                     }                      }
                     # determine user password                      # determine user password
                     my $password;                      my $password = $genpwd;
                     my $passwdfromfile;  
                     if (defined($fields{'ipwd'})) {                      if (defined($fields{'ipwd'})) {
                         if ($entries{$fields{'ipwd'}}) {                          if ($entries{$fields{'ipwd'}}) {
                             $password=$entries{$fields{'ipwd'}};                              $password=$entries{$fields{'ipwd'}};
                             $passwdfromfile = 1;  
                             if ($env{'form.login'} eq 'int') {  
                                 my $uhome=&Apache::lonnet::homeserver($username,$userdomain);  
                                 if (($uhome eq 'no_host') || ($changeauth)) {  
                                     my @brokepwdrules =  
                                         &Apache::loncommon::check_passwd_rules($domain,$password);  
                                     if (@brokepwdrules) {  
                                         $disallow{$counter} = &mt('[_1]: Password included in file for this user did not meet requirements.',  
                                                                   '<b>'.$username.'</b>');  
                                         map { $showpasswdrules{$_} = 1; } @brokepwdrules;  
                                         next;  
                                     }  
                                 }  
                             }  
                         }  
                     }  
                     unless ($passwdfromfile) {  
                         if ($env{'form.login'} eq 'int') {  
                             if (@genpwdfail) {  
                                 my $uhome=&Apache::lonnet::homeserver($username,$userdomain);  
                                 if (($uhome eq 'no_host') || ($changeauth)) {  
                                     $disallow{$counter} = &mt('[_1]: No specific password in file for this user; default password did not meet requirements',  
                                                               '<b>'.$username.'</b>');  
                                     unless ($haspasswdmap) {  
                                         map { $showpasswdrules{$_} = 1; } @genpwdfail;  
                                         $haspasswdmap = 1;  
                                     }  
                                 }  
                                 next;  
                             }  
                         }                          }
                         $password = $genpwd;  
                     }                      }
                     # determine user role                      # determine user role
                     my $role = '';                      my $role = '';
Line 4603  sub upfile_drop_add { Line 4629  sub upfile_drop_add {
                                 &mt('The user does not already exist, and you may not create a new user in a different domain.');                                  &mt('The user does not already exist, and you may not create a new user in a different domain.');
                             next;                              next;
                         } else {                          } else {
                             unless ($password || $env{'form.login'} eq 'loc') {                              unless (($password ne '') || ($env{'form.login'} eq 'loc') || ($env{'form.login'} eq 'lti')) {
                                 $disallow{$counter} =                                  $disallow{$counter} =
                                     &mt('[_1]: This is a new user but no default password was provided, and the authentication type requires one.',                                      &mt('[_1]: This is a new user but no default password was provided, and the authentication type requires one.',
                                         '<b>'.$username.'</b>');                                          '<b>'.$username.'</b>');
Line 4806  sub upfile_drop_add { Line 4832  sub upfile_drop_add {
                     my (%userres,%authres,%roleres,%idres);                      my (%userres,%authres,%roleres,%idres);
                     my $singlesec = '';                      my $singlesec = '';
                     if ($role eq 'st') {                      if ($role eq 'st') {
                         if (($context eq 'domain') && ($changeauth eq 'Yes') && (!$newuser)) {  
                             if ((&Apache::lonnet::allowed('mau',$userdomain)) &&  
                                 (&Apache::lonnet::homeserver($username,$userdomain) ne 'no_host')) {  
                                 if ((($amode =~ /^krb4|krb5|internal$/) && $password ne '') ||  
                                      ($amode eq 'localauth')) {  
                                     $authresult =  
                                         &Apache::lonnet::modifyuserauth($userdomain,$username,$amode,$password);  
                                 }  
                             }  
                         }  
                         my $sec;                          my $sec;
                         if (ref($userinfo{$i}{'sections'}) eq 'ARRAY') {                          if (ref($userinfo{$i}{'sections'}) eq 'ARRAY') {
                             if (@secs > 0) {                              if (@secs > 0) {
Line 4857  sub upfile_drop_add { Line 4873  sub upfile_drop_add {
                                     }                                      }
                                 }                                  }
                             }                              }
                         }                              if (!$multiple) {
                         if (!$multiple) {                                  ($userresult,$authresult,$roleresult,$idresult) = 
                             ($userresult,$authresult,$roleresult,$idresult) =                                       &modifyuserrole($context,$setting,
                                 &modifyuserrole($context,$setting,                                                      $changeauth,$cid,$userdomain,$username, 
                                                 $changeauth,$cid,$userdomain,$username,                                                       $id,$amode,$password,$fname,
                                                 $id,$amode,$password,$fname,                                                      $mname,$lname,$gen,$singlesec,
                                                 $mname,$lname,$gen,$singlesec,                                                      $env{'form.forceid'},$desiredhost,
                                                 $env{'form.forceid'},$desiredhost,                                                      $email,$role,$enddate,$startdate,
                                                 $email,$role,$enddate,$startdate,                                                      $checkid,$inststatus);
                                                 $checkid,$inststatus);                              }
                         }                          }
                     }                      }
                     if ($multiple) {                      if ($multiple) {
Line 4907  sub upfile_drop_add { Line 4923  sub upfile_drop_add {
                           $counts{'auth'})."</p>\n");                            $counts{'auth'})."</p>\n");
         }          }
         $r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules));          $r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules));
         $r->print(&passwdrule_alerts($domain,\%showpasswdrules));  
         #####################################          #####################################
         # Display list of students to drop  #          # Display list of students to drop  #
         #####################################          #####################################
Line 4977  sub print_namespacing_alerts { Line 4992  sub print_namespacing_alerts {
     }      }
 }  }
   
 sub passwdrule_alerts {  
     my ($domain,$passwdrules) = @_;  
     my $warning;  
     if (ref($passwdrules) eq 'HASH') {  
         my %showrules = %{$passwdrules};  
         if (keys(%showrules)) {  
             my %passwdconf = &Apache::lonnet::get_passwdconf($domain);  
             $warning = '<b>'.&mt('Password requirement(s) unmet for one or more users:').'</b><ul>';  
             if ($showrules{'min'}) {  
                 my $min = $passwdconf{'min'};  
                 if ($min eq '') {  
                     $min = $Apache::lonnet::passwdmin;  
                 }  
                 $warning .= '<li>'.&mt('minimum [quant,_1,character]',$min).'</li>';  
             }  
             if ($showrules{'max'}) {  
                 $warning .= '<li>'.&mt('maximum [quant,_1,character]',$passwdconf{'max'}).'</li>';  
             }  
             if ($showrules{'uc'}) {  
                 $warning .= '<li>'.&mt('contain at least one upper case letter').'</li>';  
             }  
             if ($showrules{'lc'}) {  
                 $warning .= '<li>'.&mt('contain at least one lower case letter').'</li>';  
             }  
             if ($showrules{'num'}) {  
                 $warning .= '<li>'.&mt('contain at least one number').'</li>';  
             }  
             if ($showrules{'spec'}) {  
                 $warning .= '<li>'.&mt('contain at least one non-alphanumeric').'</li>';  
             }  
             $warning .= '</ul>';  
         }  
     }  
     return $warning;  
 }  
   
 sub user_change_result {  sub user_change_result {
     my ($r,$userresult,$authresult,$roleresult,$idresult,$counts,$flushc,      my ($r,$userresult,$authresult,$roleresult,$idresult,$counts,$flushc,
         $username,$userdomain,$userchg) = @_;          $username,$userdomain,$userchg) = @_;
Line 5516  END Line 5495  END
 }  }
   
 sub set_login {  sub set_login {
     my ($dom,$authformkrb,$authformint,$authformloc) = @_;      my ($dom,$authformkrb,$authformint,$authformloc,$authformlti) = @_;
     my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom);      my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom);
     my $response;      my $response;
     my ($authnum,%can_assign) =      my ($authnum,%can_assign) =
Line 5538  sub set_login { Line 5517  sub set_login {
                          '<td>'.$authformloc.'</td>'.                           '<td>'.$authformloc.'</td>'.
                          &Apache::loncommon::end_data_table_row()."\n";                           &Apache::loncommon::end_data_table_row()."\n";
         }          }
           if ($can_assign{'lti'}) {
               $response .= &Apache::loncommon::start_data_table_row().
                            '<td>'.$authformlti.'</td>'.
                            &Apache::loncommon::end_data_table_row()."\n";
           }
         $response .= &Apache::loncommon::end_data_table();          $response .= &Apache::loncommon::end_data_table();
     }      }
     return $response;      return $response;
Line 5892  sub can_change_internalpass { Line 5876  sub can_change_internalpass {
         unless ($env{'course.'.$env{'request.course.id'}.'.internal.nopasswdchg'}) {          unless ($env{'course.'.$env{'request.course.id'}.'.internal.nopasswdchg'}) {
             my ($cnum,$cdom) = &get_course_identity();              my ($cnum,$cdom) = &get_course_identity();
             if ((&Apache::lonnet::is_course_owner($cdom,$cnum)) && ($udom eq $env{'user.domain'})) {              if ((&Apache::lonnet::is_course_owner($cdom,$cnum)) && ($udom eq $env{'user.domain'})) {
                 my @userstatuses = ('default');                  my $noupdate;
                 my %userenv = &Apache::lonnet::userenvironment($udom,$uname,'inststatus');  
                 if ($userenv{'inststatus'} ne '') {  
                     @userstatuses =  split(/:/,$userenv{'inststatus'});  
                 }  
                 my $noupdate = 1;  
                 my %passwdconf = &Apache::lonnet::get_passwdconf($cdom);  
                 if (ref($passwdconf{'crsownerchg'}) eq 'HASH') {  
                     if (ref($passwdconf{'crsownerchg'}{'for'}) eq 'ARRAY') {  
                         foreach my $status (@userstatuses) {  
                             if (grep(/^\Q$status\E$/,@{$passwdconf{'crsownerchg'}{'for'}})) {  
                                 undef($noupdate);  
                                 last;  
                             }  
                         }  
                     }  
                 }  
                 if ($noupdate) {  
                     return;  
                 }  
                 my %owned = &Apache::lonnet::courseiddump($cdom,'.',1,'.',                  my %owned = &Apache::lonnet::courseiddump($cdom,'.',1,'.',
                                                           $env{'user.name'}.':'.$env{'user.domain'},                                                            $env{'user.name'}.':'.$env{'user.domain'},
                                                           undef,undef,undef,'.');                                                            undef,undef,undef,'.');
Line 6164  sub get_course_identity { Line 6129  sub get_course_identity {
 }  }
   
 sub dc_setcourse_js {  sub dc_setcourse_js {
     my ($formname,$mode,$context,$showcredits,$domain) = @_;      my ($formname,$mode,$context,$showcredits) = @_;
     my ($dc_setcourse_code,$authen_check);      my ($dc_setcourse_code,$authen_check);
     my $cctext = &Apache::lonnet::plaintext('cc');      my $cctext = &Apache::lonnet::plaintext('cc');
     my $cotext = &Apache::lonnet::plaintext('co');      my $cotext = &Apache::lonnet::plaintext('co');
Line 6173  sub dc_setcourse_js { Line 6138  sub dc_setcourse_js {
     if ($mode eq 'upload') {      if ($mode eq 'upload') {
         $role = 'courserole';          $role = 'courserole';
     } else {      } else {
         $authen_check = &verify_authen($formname,$context,$domain);          $authen_check = &verify_authen($formname,$context);
     }      }
     $dc_setcourse_code = (<<"SCRIPTTOP");      $dc_setcourse_code = (<<"SCRIPTTOP");
 $authen_check  $authen_check
Line 6317  ENDSCRIPT Line 6282  ENDSCRIPT
 }  }
   
 sub verify_authen {  sub verify_authen {
     my ($formname,$context,$domain) = @_;      my ($formname,$context) = @_;
     my %alerts = &authcheck_alerts();      my %alerts = &authcheck_alerts();
     my $finish = "return 'ok';";      my $finish = "return 'ok';";
     if ($context eq 'author') {      if ($context eq 'author') {
         $finish = "document.$formname.submit();";          $finish = "document.$formname.submit();";
     }      }
     my ($numrules,$intargjs) =  
         &Apache::loncommon::passwd_validation_js('argpicked',$domain);  
     my $outcome = <<"ENDSCRIPT";      my $outcome = <<"ENDSCRIPT";
   
 function auth_check() {  function auth_check() {
Line 6358  function auth_check() { Line 6321  function auth_check() {
                 break;                  break;
             case 'int':              case 'int':
                 alertmsg = '$alerts{'ipass'}';                  alertmsg = '$alerts{'ipass'}';
                 break;  
             case 'fsys':              case 'fsys':
                 alertmsg = '$alerts{'ipass'}';                  alertmsg = '$alerts{'ipass'}';
                 break;                  break;
Line 6372  function auth_check() { Line 6334  function auth_check() {
             alert(alertmsg);              alert(alertmsg);
             return;              return;
         }          }
     } else if (logintype == 'int') {  
         var numrules = $numrules;  
         if (numrules > 0) {  
 $intargjs  
         }  
     }      }
     $finish      $finish
 }  }

Removed from v.1.184.4.10.2.1  
changed lines
  Added in v.1.195


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