Diff for /loncom/interface/lonuserutils.pm between versions 1.180 and 1.184.4.5

version 1.180, 2017/01/02 19:44:07 version 1.184.4.5, 2019/08/26 01:28:51
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);                                                     $context,$showcredits,$domain);
             }              }
             $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) =
               &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 'loc':              case 'loc':
             case 'fsys':              case 'int':
                 alertmsg = '$alert{'ipass'}';                  alertmsg = '$alert{'ipass'}';
                 break;                  break;
             case 'fsys':              case 'fsys':
                 alertmsg = '';                  alertmsg = '$alert{'ipass'}';
                 break;                  break;
             default:              default:
                 alertmsg = '';                  alertmsg = '';
Line 553  END Line 557  END
             alert(alertmsg);              alert(alertmsg);
             return;              return;
         }          }
       } else if (current.radiovalue == 'int') {
           if ($numrules > 0) {
   $intargjs
           }
     }      }
 END  END
     }      }
Line 641  END Line 649  END
                  $section_checks.$authheader;                   $section_checks.$authheader;
     return $result;      return $result;
 }  }
   
   sub passwd_validation_js {
       my ($currpasswdval,$domain) = @_;
       my %passwdconf = &Apache::lonnet::get_passwdconf($domain);
       my ($min,$max,@chars,$numrules,$intargjs,%alert);
       $numrules = 0;
       $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'};
               $numrules ++;
           }
           @chars = @{$passwdconf{'chars'}};
           if (@chars) {
               $numrules ++;
           }
       }
       if ($min > 0) {
           $numrules ++;
       }
       if (($min > 0) || ($max ne '') || (@chars > 0)) {
           my $alertmsg = &mt('Initial password did not satisfy requirement(s):').'\n\n';
           if ($min) {
               $alert{'min'} = &mt('minimum [quant,_1,character]',$min).'\n';
           }
           if ($max) {
               $alert{'max'} = &mt('maximum [quant,_1,character]',$max).'\n';
           }
           my (@charalerts,@charrules);
           if (@chars) {
               if (grep(/^uc$/,@chars)) {
                   push(@charalerts,&mt('contain at least one upper case letter'));
                   push(@charrules,'uc');
               }
               if (grep(/^lc$/,@chars)) {
                   push(@charalerts,&mt('contain at least one lower case letter'));
                   push(@charrules,'lc');
               }
               if (grep(/^num$/,@chars)) {
                   push(@charalerts,&mt('contain at least one number'));
                   push(@charrules,'num');
               }
               if (grep(/^spec$/,@chars)) {
                   push(@charalerts,&mt('contain at least one non-alphanumeric'));
                   push(@charrules,'spec');
               }
           }
           $intargjs = qq|            var rulesmsg = '';\n|.
                       qq|            var currpwval = $currpasswdval;\n|;
               if ($min) {
                   $intargjs .= qq|
               if (currpwval.length < $min) {
                   rulesmsg += ' - $alert{min}';
               }
   |;
               }
               if ($max) {
                   $intargjs .= qq|
               if (currpwval.length > $max) {
                   rulesmsg += ' - $alert{max}';
               }
   |;
               }
               if (@chars > 0) {
                   my $charrulestr = '"'.join('","',@charrules).'"';
                   my $charalertstr = '"'.join('","',@charalerts).'"';
                   $intargjs .= qq|            var brokerules = new Array();\n|.
                                qq|            var charrules = new Array($charrulestr);\n|.
                                qq|            var charalerts = new Array($charalertstr);\n|;
                   my %rules;
                   map { $rules{$_} = 1; } @chars;
                   if ($rules{'uc'}) {
                       $intargjs .= qq|
               var ucRegExp = /[A-Z]/;
               if (!ucRegExp.test(currpwval)) {
                   brokerules.push('uc');
               }
   |;
                   }
                   if ($rules{'lc'}) {
                       $intargjs .= qq|
               var lcRegExp = /[a-z]/;
               if (!lcRegExp.test(currpwval)) {
                   brokerules.push('lc');
               }
   |;
                   }
                   if ($rules{'num'}) {
                        $intargjs .= qq|
               var numRegExp = /[0-9]/;
               if (!numRegExp.test(currpwval)) {
                   brokerules.push('num');
               }
   |;
                   }
                   if ($rules{'spec'}) {
                        $intargjs .= q|
               var specRegExp = /[!"#$%&'()*+,\-.\/:;<=>?@[\\^\]_`{\|}~]/;
               if (!specRegExp.test(currpwval)) {
                   brokerules.push('spec');
               }
   |;
                   }
                   $intargjs .= qq|
               if (brokerules.length > 0) {
                   for (var i=0; i<brokerules.length; i++) {
                       for (var j=0; j<charrules.length; j++) {
                           if (brokerules[i] == charrules[j]) {
                               rulesmsg += ' - '+charalerts[j]+'\\n';
                               break;
                           }
                       }
                   }
               }
   |;
               }
               $intargjs .= qq|
               if (rulesmsg != '') {
                   rulesmsg = '$alertmsg'+rulesmsg;
                   alert(rulesmsg);
                   return false;
               }
   |;
       }
       return ($numrules,$intargjs);
   }
   
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
 sub upload_manager_javascript_forward_associate {  sub upload_manager_javascript_forward_associate {
Line 1121  sub print_upload_manager_form { Line 1261  sub print_upload_manager_form {
     if (!$env{'form.datatoken'}) {      if (!$env{'form.datatoken'}) {
         $datatoken=&Apache::loncommon::upfile_store($r);          $datatoken=&Apache::loncommon::upfile_store($r);
     } else {      } else {
         $datatoken=$env{'form.datatoken'};          $datatoken=&Apache::loncommon::valid_datatoken($env{'form.datatoken'});
         &Apache::loncommon::load_tmp_file($r);          if ($datatoken ne '') {
               &Apache::loncommon::load_tmp_file($r,$datatoken);
           }
       }
       if ($datatoken eq '') {
           $r->print('<p class="LC_error">'.&mt('Error').': '.
                     &mt('Invalid datatoken').'</p>');
           return 'missingdata';
     }      }
     my @records=&Apache::loncommon::upfile_record_sep();      my @records=&Apache::loncommon::upfile_record_sep();
     if($env{'form.noFirstLine'}){      if($env{'form.noFirstLine'}){
Line 1206  sub print_upload_manager_form { Line 1353  sub print_upload_manager_form {
     }      }
     &print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear,      &print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear,
                                  $context,$permission,$crstype,$showcredits);                                   $context,$permission,$crstype,$showcredits);
       return 'ok';
 }  }
   
 sub setup_date_selectors {  sub setup_date_selectors {
Line 2279  sub build_user_record { Line 2427  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 2292  sub courses_selector { Line 2439  sub courses_selector {
     my $jscript = '';      my $jscript = '';
   
     my $totcodes = 0;      my $totcodes = 0;
     $totcodes =      my $instcats = &Apache::lonnet::get_dom_instcats($cdom);
         &Apache::courseclassifier::retrieve_instcodes(\%coursecodes,      if (ref($instcats) eq 'HASH') {
                                                       $cdom,$totcodes);          if ((ref($instcats->{'codetitles'}) eq 'ARRAY') && (ref($instcats->{'codes'}) eq 'HASH') &&
     if ($totcodes > 0) {              (ref($instcats->{'cat_titles'}) eq 'HASH') && (ref($instcats->{'cat_order'}) eq 'HASH')) {
         $format_reply =              %codes = %{$instcats->{'codes'}};
              &Apache::lonnet::auto_instcode_format($caller,$cdom,\%coursecodes,              @codetitles = @{$instcats->{'codetitles'}};
                                 \%codes,\@codetitles,\%cat_titles,\%cat_order);              %cat_titles = %{$instcats->{'cat_titles'}};
         if ($format_reply eq 'ok') {              %cat_order = %{$instcats->{'cat_order'}};
               $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 2307  sub courses_selector { Line 2455  sub courses_selector {
             my $allidlist = $idlist{$codetitles[0]};              my $allidlist = $idlist{$codetitles[0]};
             $jscript .= &Apache::courseclassifier::courseset_js_start($formname,$longtitles_str,$allidlist);              $jscript .= &Apache::courseclassifier::courseset_js_start($formname,$longtitles_str,$allidlist);
             $jscript .= $scripttext;              $jscript .= $scripttext;
             $jscript .= &Apache::courseclassifier::javascript_code_selections($formname,@codetitles);              $jscript .= &Apache::courseclassifier::javascript_code_selections($formname,\@codetitles);
         }          }
     }      }
     my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($cdom);      my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($cdom);
Line 2336  function setCourseCat(formname) { Line 2484  function setCourseCat(formname) {
     }      }
     courseSet('$codetitles[1]');      courseSet('$codetitles[1]');
     for (var j=0; j<formname.Department.length; j++) {      for (var j=0; j<formname.Department.length; j++) {
         if (formname.Department.options[j].value == "$env{'form.Department'}") {            formname.Department.options[j].selected = true;          if (formname.Department.options[j].value == "$env{'form.Department'}") {
               formname.Department.options[j].selected = true;
         }          }
     }      }
     if (formname.Department.options[formname.Department.selectedIndex].value == -1) {      if (formname.Department.options[formname.Department.selectedIndex].value == -1) {
Line 2757  END Line 2906  END
                .'<input type="checkbox" name="userwin" value="1"'.$checkwin.' />'.$lt{'owin'}                 .'<input type="checkbox" name="userwin" value="1"'.$checkwin.' />'.$lt{'owin'}
                .'</label></span></td></tr></table></fieldset></div>';                 .'</label></span></td></tr></table></fieldset></div>';
         }          }
         $output .= "\n".'<br clear="all" />'."\n".          $output .= "\n".'<div style="padding:0;clear:both;margin:0;border:0"></div>'."\n".
                   &Apache::loncommon::start_data_table().                    &Apache::loncommon::start_data_table().
                   &Apache::loncommon::start_data_table_header_row();                    &Apache::loncommon::start_data_table_header_row();
         if ($mode eq 'autoenroll') {          if ($mode eq 'autoenroll') {
Line 3101  END Line 3250  END
                         }                          }
                         if ($showcheckbox) {                          if ($showcheckbox) {
                             $r->print('<td><input type="checkbox" name="'.                              $r->print('<td><input type="checkbox" name="'.
                                       'actionlist" value="'.&HTML::Entities::encode($checkval,'&<>"').'" /></td>');                                        'actionlist" value="'.
                                         &HTML::Entities::encode($checkval,'&<>"').'" />');
                               foreach my $item ('start','end') {
                                   $r->print('<input type="hidden" name="'.
                                             &HTML::Entities::encode($checkval.'_'.$item,'&<>"').'"'.
                                             ' value="'.$sdata->[$index{$item}].'" />');
                               }
                               $r->print('</td>');
                         } else {                          } else {
                             $r->print('<td>&nbsp;</td>');                              $r->print('<td>&nbsp;</td>');
                         }                          }
Line 3115  END Line 3271  END
             foreach my $item (@cols) {              foreach my $item (@cols) {
                 if ($item eq 'username') {                  if ($item eq 'username') {
                     $r->print('<td>'.&print_username_link($mode,\%in).'</td>');                      $r->print('<td>'.&print_username_link($mode,\%in).'</td>');
                 } elsif (($item eq 'start' || $item eq 'end') && ($actionselect)) {  
                     $r->print('<td>'.$in{$item}.'<input type="hidden" name="'.&HTML::Entities::encode($checkval.'_'.$item.'" value="'.$sdata->[$index{$item}],'&<>"').'" /></td>'."\n");  
                 } elsif ($item eq 'status') {                  } elsif ($item eq 'status') {
                     my $showitem = $in{$item};                      my $showitem = $in{$item};
                     if (defined($ltstatus{$in{$item}})) {                      if (defined($ltstatus{$in{$item}})) {
Line 4091  sub print_first_users_upload_form { Line 4245  sub print_first_users_upload_form {
            .&Apache::lonhtmlcommon::end_pick_box();             .&Apache::lonhtmlcommon::end_pick_box();
   
     $str .= '<p>'      $str .= '<p>'
            .'<input type="submit" name="fileupload" value="'.&mt('Next').'"'             .'<input type="button" name="fileupload" value="'.&mt('Next').'"'
            .' onclick="javascript:checkUpload(this.form);" />'             .' onclick="javascript:checkUpload(this.form);" />'
            .'</p>';             .'</p>';
   
Line 4102  sub print_first_users_upload_form { Line 4256  sub print_first_users_upload_form {
 # ================================================= Drop/Add from uploaded file  # ================================================= Drop/Add from uploaded file
 sub upfile_drop_add {  sub upfile_drop_add {
     my ($r,$context,$permission,$showcredits) = @_;      my ($r,$context,$permission,$showcredits) = @_;
     &Apache::loncommon::load_tmp_file($r);      my $datatoken = &Apache::loncommon::valid_datatoken($env{'form.datatoken'});
       if ($datatoken ne '') {
           &Apache::loncommon::load_tmp_file($r,$datatoken);
       }
     my @userdata=&Apache::loncommon::upfile_record_sep();      my @userdata=&Apache::loncommon::upfile_record_sep();
     if($env{'form.noFirstLine'}){shift(@userdata);}      if($env{'form.noFirstLine'}){shift(@userdata);}
     my @keyfields = split(/\,/,$env{'form.keyfields'});      my @keyfields = split(/\,/,$env{'form.keyfields'});
Line 4116  sub upfile_drop_add { Line 4273  sub upfile_drop_add {
             $fields{$env{'form.f'.$i}}=$keyfields[$i];              $fields{$env{'form.f'.$i}}=$keyfields[$i];
         }          }
     }      }
     if ($env{'form.fullup'} ne 'yes') {  
         $r->print('<form name="studentform" method="post" action="/adm/createuser">'."\n".  
                   '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />');  
     }  
     #      #
     # Store the field choices away      # Store the field choices away
     my @storefields = qw/username names fname mname lname gen id       my @storefields = qw/username names fname mname lname gen id 
Line 4164  sub upfile_drop_add { Line 4317  sub upfile_drop_add {
     } else {      } else {
         my %home_servers = &Apache::lonnet::get_servers($defdom,'library');          my %home_servers = &Apache::lonnet::get_servers($defdom,'library');
         if (! exists($home_servers{$desiredhost})) {          if (! exists($home_servers{$desiredhost})) {
             $r->print('<span class="LC_error">'.&mt('Error').              $r->print('<p class="LC_error">'.&mt('Error').': '.
                       &mt('Invalid home server specified').'</span>');                        &mt('Invalid home server specified').'</p>');
             $r->print(&Apache::loncommon::end_page());              $r->print(&Apache::loncommon::end_page());
             return;              return 'invalidhome';
         }          }
     }      }
     # Determine authentication mechanism      # Determine authentication mechanism
Line 4177  sub upfile_drop_add { Line 4330  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 4185  sub upfile_drop_add { Line 4339  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';
Line 4263  sub upfile_drop_add { Line 4419  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);
   
             }              }
         }          }
     }      }
       if ($datatoken eq '') {
           $r->print('<p class="LC_error">'.&mt('Error').': '.
                     &mt('Invalid datatoken').'</p>');
           return 'missingdata';
       }
     if ( $domain eq &LONCAPA::clean_domain($domain)      if ( $domain eq &LONCAPA::clean_domain($domain)
         && ($amode ne '')) {          && ($amode ne '')) {
         #######################################          #######################################
Line 4336  sub upfile_drop_add { Line 4496  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;
         foreach my $line (@userdata) {          foreach my $line (@userdata) {
             $counter ++;              $counter ++;
Line 4464  sub upfile_drop_add { Line 4625  sub upfile_drop_add {
                         }                          }
                     }                      }
                     # determine user password                      # determine user password
                     my $password = $genpwd;                      my $password;
                       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 4819  sub upfile_drop_add { Line 5012  sub upfile_drop_add {
                   "</p>\n");                    "</p>\n");
         if ($counts{'role'} > 0) {          if ($counts{'role'} > 0) {
             $r->print("<p>\n".              $r->print("<p>\n".
                       &mt('Roles added for [quant,_1,user].',$counts{'role'}).' '.&mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.')."</p>\n");                        &mt('Roles added for [quant,_1,user].',$counts{'role'}).' '.
                         &mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.').
                         "</p>\n");
         } else {          } else {
             $r->print('<p>'.&mt('No roles added').'</p>');              $r->print('<p>'.&mt('No roles added').'</p>');
         }          }
Line 4829  sub upfile_drop_add { Line 5024  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 4837  sub upfile_drop_add { Line 5033  sub upfile_drop_add {
             #  Get current classlist              #  Get current classlist
             my $classlist = &Apache::loncoursedata::get_classlist();              my $classlist = &Apache::loncoursedata::get_classlist();
             if (! defined($classlist)) {              if (! defined($classlist)) {
                 $r->print('<form name="studentform" method="post" action="/adm/createuser">'.                  $r->print('<p class="LC_info">'.
                           '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'.                            &mt('There are no students with current/future access to the course.').
                           '<p class="LC_info">'.&mt('There are no students with current/future access to the course.').'</p>'.                            '</p>'."\n");
                           '</form>'."\n");  
             } elsif (ref($classlist) eq 'HASH') {              } elsif (ref($classlist) eq 'HASH') {
                 # Remove the students we just added from the list of students.                  # Remove the students we just added from the list of students.
                 foreach my $line (@userdata) {                  foreach my $line (@userdata) {
Line 4856  sub upfile_drop_add { Line 5051  sub upfile_drop_add {
             }              }
         }          }
     } # end of unless      } # end of unless
     if ($env{'form.fullup'} ne 'yes') {      return 'ok';
         $r->print('</form>');  
     }  
 }  }
   
 sub print_namespacing_alerts {  sub print_namespacing_alerts {
Line 4901  sub print_namespacing_alerts { Line 5094  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'}) {
                   $warning .= '<li>'.&mt('minimum [quant,_1,character]',$passwdconf{'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 5833  sub roles_by_context { Line 6058  sub roles_by_context {
     } elsif ($context eq 'author') {      } elsif ($context eq 'author') {
         @allroles = ('ca','aa');          @allroles = ('ca','aa');
     } elsif ($context eq 'domain') {      } elsif ($context eq 'domain') {
         @allroles = ('li','ad','dg','dh','sc','au','dc');          @allroles = ('li','ad','dg','dh','da','sc','au','dc');
     }      }
     return @allroles;      return @allroles;
 }  }
Line 5982  sub get_course_identity { Line 6207  sub get_course_identity {
 }  }
   
 sub dc_setcourse_js {  sub dc_setcourse_js {
     my ($formname,$mode,$context,$showcredits) = @_;      my ($formname,$mode,$context,$showcredits,$domain) = @_;
     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 5991  sub dc_setcourse_js { Line 6216  sub dc_setcourse_js {
     if ($mode eq 'upload') {      if ($mode eq 'upload') {
         $role = 'courserole';          $role = 'courserole';
     } else {      } else {
         $authen_check = &verify_authen($formname,$context);          $authen_check = &verify_authen($formname,$context,$domain);
     }      }
     $dc_setcourse_code = (<<"SCRIPTTOP");      $dc_setcourse_code = (<<"SCRIPTTOP");
 $authen_check  $authen_check
Line 6135  ENDSCRIPT Line 6360  ENDSCRIPT
 }  }
   
 sub verify_authen {  sub verify_authen {
     my ($formname,$context) = @_;      my ($formname,$context,$domain) = @_;
     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) =
           &passwd_validation_js('argpicked',$domain);
     my $outcome = <<"ENDSCRIPT";      my $outcome = <<"ENDSCRIPT";
   
 function auth_check() {  function auth_check() {
Line 6174  function auth_check() { Line 6401  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 6187  function auth_check() { Line 6415  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.180  
changed lines
  Added in v.1.184.4.5


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