Diff for /loncom/interface/Attic/londropadd.pm between versions 1.60 and 1.89

version 1.60, 2002/11/08 20:51:48 version 1.89, 2003/11/06 22:49:59
Line 32 Line 32
 # (TeX Content Handler  # (TeX Content Handler
 #  #
 ###############################################################  ###############################################################
 ###############################################################  ##############################################################
   
 package Apache::londropadd;  package Apache::londropadd;
   
Line 42  use Apache::loncommon(); Line 42  use Apache::loncommon();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::Constants qw(:common :http REDIRECT);  use Apache::Constants qw(:common :http REDIRECT);
 use Spreadsheet::WriteExcel;  use Spreadsheet::WriteExcel;
   use Apache::lonlocal;
   
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
 sub header {  sub header {
     my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager');      my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager');
       my $title = &mt('LON-CAPA Enrollment Manager');
     return(<<ENDHEAD);      return(<<ENDHEAD);
 <html>  <html>
 <head>  <head>
 <title>LON-CAPA Enrollment Manager</title>  <title>$title</title>
 </head>  </head>
 $bodytag  $bodytag
 <form method="post" enctype="multipart/form-data"    <form method="post" enctype="multipart/form-data"  
Line 79  sub modifystudent { Line 81  sub modifystudent {
             # We are in this course              # We are in this course
             my $section=$1;              my $section=$1;
             $section='' if ($course eq $courseid.'_st');              $section='' if ($course eq $courseid.'_st');
             if ( ((!$section) && (!$csec)) || ($section ne $csec) ) {              if (defined($csec) && $section eq $csec) {
                   $result .= 'ok:';
               } elsif ( ((!$section) && (!$csec)) || ($section ne $csec) ) {
                 my (undef,$end,$start)=split(/\_/,$roles{$course});                  my (undef,$end,$start)=split(/\_/,$roles{$course});
                 my $now=time;                  my $now=time;
                 # if this is an active role                   # if this is an active role 
                 if (!($start && ($now<$start)) || !($end && ($now>$end))) {                  if (!($start && ($now<$start)) || !($end && ($now>$end))) {
                     my $reply=&Apache::lonnet::modifystudent                      my $reply=&Apache::lonnet::modifystudent
                         ($udom,$unam,'','','','','','','',                          # dom  name  id mode pass     f     m     l     g
                           ($udom,$unam,'',  '',  '',undef,undef,undef,undef,
                          $section,time,undef,undef,$desiredhost);                           $section,time,undef,undef,$desiredhost);
                     $result .= $reply.':';                      $result .= $reply.':';
                 }                  }
Line 93  sub modifystudent { Line 98  sub modifystudent {
         }          }
     }      }
     if ($result eq '') {      if ($result eq '') {
         $result eq 'Unable to find section for this student';          $result = 'Unable to find section for this student';
     } else {      } else {
         $result =~ s/(ok:)+/ok/g;          $result =~ s/(ok:)+/ok/g;
     }      }
Line 136  sub domain_form { Line 141  sub domain_form {
 #  Menu Phase One  #  Menu Phase One
 sub print_main_menu {  sub print_main_menu {
     my $r=shift;      my $r=shift;
       my %Text = &Apache::lonlocal::texthash
           ('upload'    => 'Upload a class list',
            'enrollone' => 'Enroll a single student',
            'modify'    => 'Modify student data',
            'view'      => 'View Class List',
            'drop'      => 'Drop Students');
   
     $r->print(<<END);      $r->print(<<END);
 <p>  <p>
 <font size="+1">  <font size="+1">
     <a href="/adm/dropadd?action=upload">Upload a course list</a>      <a href="/adm/dropadd?action=upload">$Text{'upload'}</a>
 </font>  </font>
 </p><p>  </p><p>
 <font size="+1">  <font size="+1">
     <a href="/adm/dropadd?action=enrollstudent">Enroll a single student</a>      <a href="/adm/dropadd?action=enrollstudent">$Text{'enrollone'}</a>
 </font>  </font>
 </p><p>  </p><p>
 <font size="+1">  <font size="+1">
     <a href="/adm/dropadd?action=modifystudent">Modify student data</a>      <a href="/adm/dropadd?action=modifystudent">$Text{'modify'}</a>
 </font>  </font>
 </p><p>  </p><p>
 <font size="+1">  <font size="+1">
     <a href="/adm/dropadd?action=classlist">View Classlist</a>      <a href="/adm/dropadd?action=classlist">$Text{'view'}</a>
 </font>  </font>
 </p><p>  </p><p>
 <font size="+1">  <font size="+1">
     <a href="/adm/dropadd?action=drop">Drop Students</a>      <a href="/adm/dropadd?action=drop">$Text{'drop'}</a>
 </font>  </font>
 </p>  </p>
 END  END
Line 163  END Line 175  END
   
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
   sub hidden_input {
       my ($name,$value) = @_;
       return '<input type="hidden" name="'.$name.'" value="'.$value.'" />'."\n";
   }
   
 sub print_upload_manager_header {  sub print_upload_manager_header {
     my ($r,$datatoken,$distotal,$krbdefdom)=@_;      my ($r,$datatoken,$distotal,$krbdefdom)=@_;
     my $javascript;      my $javascript;
Line 181  sub print_upload_manager_header { Line 198  sub print_upload_manager_header {
     } else {      } else {
  $javascript=&upload_manager_javascript_forward_associate();   $javascript=&upload_manager_javascript_forward_associate();
     }      }
     my $javascript_validations=&javascript_validations($krbdefdom);      my $javascript_validations=&javascript_validations('auth',$krbdefdom);
     $r->print(<<ENDPICK);      my $checked=(($ENV{'form.noFirstLine'})?' checked="1"':'');
 <h3>Uploading Class List</h3>      $r->print('<h3>'.&mt('Uploading Class List')."</h3>\n".
 <hr>                "<hr>\n".
 <h3>Identify fields</h3>                '<h3>'.&mt('Identify fields')."</h3>\n");
 Total number of records found in file: $distotal <hr />      $r->print("<p>\n".
 Enter as many fields as you can. The system will inform you and bring you back                &mt('Total number of records found in file: [_1].',$distotal).
 to this page if the data selected is insufficient to run your class.<hr />                "\n".
 <input type="button" value="Reverse Association" onClick="javascript:this.form.associate.value='Reverse Association';submit(this.form);" />                "</p><hr>\n");
 <input type="hidden" name="action"     value="upload" />      $r->print(&mt('Enter as many fields as you can. '.
 <input type="hidden" name="state"      value="got_file" />                    'The system will inform you and bring you back to '.
 <input type="hidden" name="associate"  value="" />                    'this page if the data selected is insufficient to '.
 <input type="hidden" name="datatoken"  value="$datatoken" />                    'enroll students in your class.')."<hr>\n");
 <input type="hidden" name="fileupload" value="$ENV{'form.fileupload'}" />      $r->print(&hidden_input('action','upload').
 <input type="hidden" name="upfiletype" value="$ENV{'form.upfiletype'}" />                &hidden_input('state','got_file').
 <input type="hidden" name="upfile_associate"                 &hidden_input('associate','').
                                        value="$ENV{'form.upfile_associate'}" />                &hidden_input('datatoken',$datatoken).
 <hr />                &hidden_input('fileupload',$ENV{'form.fileupload'}).
 <script type="text/javascript" language="Javascript">                &hidden_input('upfiletype',$ENV{'form.upfiletype'}).
 $javascript                &hidden_input('upfile_associate',$ENV{'form.upfile_associate'}));
 $javascript_validations      $r->print('<input type="button" value="Reverse Association" '.
 </script>                'name="'.&mt('Reverse Association').'" '.
 ENDPICK                'onClick="javascript:this.form.associate.value=\'Reverse Association\';submit(this.form);" />');
       $r->print('<input type="checkbox" name="noFirstLine" $checked />'.
                 &mt('Ignore First Line'));
       $r->print("<hr />\n".
                 '<script type="text/javascript" language="Javascript">'."\n".
                 $javascript."\n".$javascript_validations.'</script>');
 }  }
   
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
 sub javascript_validations {  sub javascript_validations {
     my ($krbdefdom)=@_;      my ($mode,$krbdefdom)=@_;
     my %param = ( formname => 'studentform',      my $authheader;
                   kerb_def_dom => $krbdefdom );      if ($mode eq 'auth') {
     my $authheader = &Apache::loncommon::authform_header(%param);          my %param = ( formname => 'studentform',
     return (<<ENDPICK);                        kerb_def_dom => $krbdefdom );
 function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec) {          $authheader = &Apache::loncommon::authform_header(%param);
       }
       my %alert = &Apache::lonlocal::texthash
           (username => 'You need to specify the username field.',
            authen   => 'You must choose an authentication type.',
            krb      => 'You need to specify the Kerberos domain.',
            ipass    => 'You need to specify the initial password.',
            name     => 'The optional name field was not specified.',
            snum     => 'The optional student number field was not specified.',
            section  => 'The optional section or group field was not specified.', 
            email    => 'The optional email address field was not specified.',
            continue => 'Continue enrollment?',
            );
       
   #    my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
       my $function_name =(<<END);
   function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) {
   END
       my $auth_checks = (<<END);
     var foundatype=0;      var foundatype=0;
     var message='';  
     if (founduname==0) {      if (founduname==0) {
  alert('You need to specify the username field');   alert('$alert{'username'}');
         return;          return;
     }      }
       // alert('current.radiovalue = '+current.radiovalue);
     if (current.radiovalue == null || current.radiovalue == 'nochange') {      if (current.radiovalue == null || current.radiovalue == 'nochange') {
         // They did not check any of the login radiobuttons.          // They did not check any of the login radiobuttons.
         alert('You must choose an authentication type');          alert('$alert{'authen'}');
         return;          return;
     }      }
     foundatype=1;      foundatype=1;
Line 231  function verify_message (vf,founduname,f Line 271  function verify_message (vf,founduname,f
         var alertmsg = '';          var alertmsg = '';
         switch (current.value) {          switch (current.value) {
             case 'krb':               case 'krb': 
                 alertmsg = 'You need to specify the Kerberos domain';                  alertmsg = '$alert{'krb'}';
                 break;                  break;
             case 'loc':              case 'loc':
             case 'fsys':              case 'fsys':
                 alertmsg = 'You need to specify the initial password';                  alertmsg = '$alert{'ipass'}';
                 break;                  break;
             case 'fsys':              case 'fsys':
                 alertmsg = '';                  alertmsg = '';
Line 248  function verify_message (vf,founduname,f Line 288  function verify_message (vf,founduname,f
             return;              return;
         }          }
     }      }
   END
     if (foundname==0) { message='No name fields specified. '; }      my $optional_checks = (<<END);
     if (foundid==0) { message+='No ID or student number field specified. '; }      var message='';
     if (foundsec==0) { message+='No section or group field specified. '; }      if (foundname==0) { 
     if (vf.startdate.value=='') {          message='$alert{'name'}';
  message+='No starting date set. ';      }
     }      if (foundid==0) { 
     if (vf.enddate.value=='') {          if (message!='') { 
         message+='No ending date set. ';              message+='\\n'; 
     }          }
     if ((vf.enddate.value!='') && (vf.startdate.value!='')) {          message+='$alert{'snum'}';
        if (Math.round(vf.enddate.value)<Math.round(vf.startdate.value)) {      }
           alert('Ending date is before starting date');      if (foundsec==0) {
           return;          if (message!='') {
        }              message+='\\n';
           } 
           message+='$alert{'section'}';
       }
       if (foundemail==0) {
           if (message!='') {
               message+='\\n';
           }
           message+='$alert{'email'}';
     }      }
     if (message!='') {      if (message!='') {
        message+='Continue enrollment?';          message+= '\\n$alert{'continue'}';
        if (confirm(message)) {          if (confirm(message)) {
   pclose();              vf.state.value='enrolling';
           vf.state.value='enrolling';              vf.submit();
   vf.submit();          }
        }  
     } else {      } else {
       pclose();          vf.state.value='enrolling';
       vf.state.value='enrolling';          vf.submit();
       vf.submit();  
     }      }
 }  }
   
   END
     function pclose() {      my $result = $function_name;
         parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",      if ($mode eq 'auth') {
                  "height=350,width=350,scrollbars=no,menubar=no");          $result .= $auth_checks;
         parmwin.close();      }
     }      $result .= $optional_checks;
       if ($mode eq 'auth') {
     function pjump(type,dis,value,marker,ret,call) {          $result .= $authheader;
         parmwin=window.open("/adm/rat/parameter.html?type="+escape(type)  
                  +"&value="+escape(value)+"&marker="+escape(marker)  
                  +"&return="+escape(ret)  
                  +"&call="+escape(call)+"&name="+escape(dis),"LONCAPAparms",  
                  "height=350,width=350,scrollbars=no,menubar=no");  
   
     }  
   
     function dateset() {  
         if (document.studentform.pres_marker.value=='end') {  
            document.studentform.enddate.value=  
        document.studentform.pres_value.value;  
         }  
         if (document.studentform.pres_marker.value=='start') {  
            document.studentform.startdate.value=  
        document.studentform.pres_value.value;  
         }  
         pclose();  
     }      }
       return $result;
 $authheader  
 ENDPICK  
   
 }  }
   
 ###############################################################  ###############################################################
Line 321  function verify(vf) { Line 346  function verify(vf) {
     var foundname=0;      var foundname=0;
     var foundid=0;      var foundid=0;
     var foundsec=0;      var foundsec=0;
       var foundemail=0;
     var tw;      var tw;
     for (i=0;i<=vf.nfields.value;i++) {      for (i=0;i<=vf.nfields.value;i++) {
         tw=eval('vf.f'+i+'.selectedIndex');          tw=eval('vf.f'+i+'.selectedIndex');
Line 329  function verify(vf) { Line 355  function verify(vf) {
         if (tw==7) { foundid=1; }          if (tw==7) { foundid=1; }
         if (tw==8) { foundsec=1; }          if (tw==8) { foundsec=1; }
         if (tw==9) { foundpwd=1; }          if (tw==9) { foundpwd=1; }
           if (tw==10) { foundemail=1; }
     }      }
     verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec);      verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail);
 }  }
   
 //  //
Line 349  function verify(vf) { Line 376  function verify(vf) {
 // 7 = id  // 7 = id
 // 8 = section  // 8 = section
 // 9 = ipwd  (password)  // 9 = ipwd  (password)
 //  // 10 = email address
   
 function flip(vf,tf) {  function flip(vf,tf) {
    var nw=eval('vf.f'+tf+'.selectedIndex');     var nw=eval('vf.f'+tf+'.selectedIndex');
    var i;     var i;
Line 460  ENDPICK Line 488  ENDPICK
 ###############################################################  ###############################################################
 sub print_upload_manager_footer {  sub print_upload_manager_footer {
     my ($r,$i,$keyfields,$defdom,$today,$halfyear)=@_;      my ($r,$i,$keyfields,$defdom,$today,$halfyear)=@_;
     my %param = ( formname => 'document.studentform');  
       my ($krbdef,$krbdefdom) =
           &Apache::loncommon::get_kerberos_defaults($defdom);
       my %param = ( formname => 'document.studentform',
                     kerb_def_dom => $krbdefdom,
                     kerb_def_auth => $krbdef
                     );
     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 $domform = &domain_form($defdom);      my $domform = &domain_form($defdom);
       my $date_table = &date_setting_table();
     $r->print(<<ENDPICK);      $r->print(<<ENDPICK);
 </table>  </table>
 <input type=hidden name=nfields value=$i>  <input type="hidden" name="nfields" value="$i">
 <input type=hidden name=keyfields value="$keyfields">  <input type="hidden" name="keyfields" value="$keyfields">
 <h3>Login Type</h3>  <h3>Login Type</h3>
 <p>Note: this will not take effect if the user already exists</p>  <p>Note: this will not take effect if the user already exists</p>
 <p>  <p>
Line 483  $locform Line 518  $locform
 <h3>LON-CAPA Domain for Students</h3>  <h3>LON-CAPA Domain for Students</h3>
 LON-CAPA domain: $domform <p>  LON-CAPA domain: $domform <p>
 <h3>Starting and Ending Dates</h3>  <h3>Starting and Ending Dates</h3>
 <input type="hidden" value=''          name="pres_value"  >  <p>
 <input type="hidden" value=''          name="pres_type"   >  $date_table
 <input type="hidden" value=''          name="pres_marker" >  </p>
 <input type="hidden" value='$today'    name="startdate"   >  
 <input type="hidden" value='$halfyear' name="enddate"     >  
 <a   
  href="javascript:pjump('date_start','Enrollment Starting Date',document.studentform.startdate.value,'start','studentform.pres','dateset');"  
 >Set Starting Date</a><p>  
   
 <a   
  href="javascript:pjump('date_end','Enrollment Ending Date',document.studentform.enddate.value,'end','studentform.pres','dateset');"  
 >Set Ending Date</a><p>  
 <h3>Full Update</h3>  <h3>Full Update</h3>
 <input type=checkbox name=fullup value=yes> Full update   <input type=checkbox name=fullup value=yes> Full update 
 (also print list of users not enrolled anymore)<p>  (also print list of users not enrolled anymore)<p>
Line 510  ENDPICK Line 536  ENDPICK
 # ======================================================= Menu Phase Two Upload  # ======================================================= Menu Phase Two Upload
 sub print_upload_manager_form {  sub print_upload_manager_form {
     my $r=shift;      my $r=shift;
       my $firstLine;
     my $datatoken;      my $datatoken;
     if (!$ENV{'form.datatoken'}) {      if (!$ENV{'form.datatoken'}) {
       $datatoken=&Apache::loncommon::upfile_store($r);        $datatoken=&Apache::loncommon::upfile_store($r);
Line 519  sub print_upload_manager_form { Line 545  sub print_upload_manager_form {
       &Apache::loncommon::load_tmp_file($r);        &Apache::loncommon::load_tmp_file($r);
     }      }
     my @records=&Apache::loncommon::upfile_record_sep();      my @records=&Apache::loncommon::upfile_record_sep();
       if($ENV{'form.noFirstLine'}){$firstLine=shift(@records);}
     my $total=$#records;      my $total=$#records;
     my $distotal=$total+1;      my $distotal=$total+1;
     $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/;  
     my $krbdefdom=$1;  
     $krbdefdom=~tr/a-z/A-Z/;  
     my $today=time;      my $today=time;
     my $halfyear=$today+15552000;      my $halfyear=$today+15552000;
     my $defdom=$r->dir_config('lonDefDomain');      my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
       my ($krbdef,$krbdefdom) =
           &Apache::loncommon::get_kerberos_defaults($defdom);
     &print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom);      &print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom);
     my $i;      my $i;
     my $keyfields;      my $keyfields;
Line 539  sub print_upload_manager_form { Line 565  sub print_upload_manager_form {
                ['gen','Generation'],                 ['gen','Generation'],
        ['id','ID/Student Number'],         ['id','ID/Student Number'],
                ['sec','Group/Section'],                 ['sec','Group/Section'],
        ['ipwd','Initial Password']);         ['ipwd','Initial Password'],
                  ['email','EMail Address']);
  if ($ENV{'form.upfile_associate'} eq 'reverse') {   if ($ENV{'form.upfile_associate'} eq 'reverse') {
     &Apache::loncommon::csv_print_samples($r,\@records);      &Apache::loncommon::csv_print_samples($r,\@records);
     $i=&Apache::loncommon::csv_print_select_table($r,\@records,\@d);      $i=&Apache::loncommon::csv_print_select_table($r,\@records,\@d);
Line 558  sub print_upload_manager_form { Line 585  sub print_upload_manager_form {
 # ======================================================= Enroll single student  # ======================================================= Enroll single student
 sub enroll_single_student {  sub enroll_single_student {
     my $r=shift;      my $r=shift;
       # Remove non alphanumeric values from section
       $ENV{'form.csec'}=~s/\W//g;
       #
       # We do the dates first because the action of making them the defaul
       # in the course is entirely seperate from the action of enrolling the
       # student.  Also, a failure in setting the dates as default is not fatal
       # to the process of enrolling / modifying a student.
       my ($startdate,$enddate) = &get_dates_from_form();
       if ($ENV{'form.makedatesdefault'}) {
           $r->print(&make_dates_default($startdate,$enddate));
       }
   
     $r->print('<h3>Enrolling Student</h3>');      $r->print('<h3>Enrolling Student</h3>');
     $r->print('<p>Enrolling '.$ENV{'form.cuname'}." \@ ".      $r->print('<p>Enrolling '.$ENV{'form.cuname'}." \@ ".
               $ENV{'form.lcdomain'}.'</p>');                $ENV{'form.lcdomain'}.'</p>');
Line 604  sub enroll_single_student { Line 643  sub enroll_single_student {
                  $ENV{'form.cstid'},$amode,$genpwd,                   $ENV{'form.cstid'},$amode,$genpwd,
                  $ENV{'form.cfirst'},$ENV{'form.cmiddle'},                   $ENV{'form.cfirst'},$ENV{'form.cmiddle'},
                  $ENV{'form.clast'},$ENV{'form.cgen'},                   $ENV{'form.clast'},$ENV{'form.cgen'},
                  $ENV{'form.csec'},$ENV{'form.enddate'},                   $ENV{'form.csec'},$enddate,
                  $ENV{'form.startdate'},$ENV{'form.forceid'},                   $startdate,$ENV{'form.forceid'},
                  $desiredhost);                   $desiredhost);
             if ($login_result =~ /^ok/) {              if ($login_result =~ /^ok/) {
                 $r->print($login_result);                  $r->print($login_result);
Line 615  sub enroll_single_student { Line 654  sub enroll_single_student {
                 $r->print("unable to enroll: ".$login_result);                  $r->print("unable to enroll: ".$login_result);
             }              }
  } else {   } else {
             $r->print('<p><font color="#ff0000">ERROR</font>&nbsp;'.              $r->print('<p><font color="#ff0000">ERROR</font>&nbsp;');
                       'Invalid login mode or password.  '.              if ($amode =~ /^krb/) {
                       'Unable to enroll '.$ENV{'form.cuname'}.'.</p>');                  $r->print('Missing Kerberos domain information.  ');
         }                        } else {
                   $r->print('Invalid login mode or password.  ');
               }
               $r->print('<b>Unable to enroll '.$ENV{'form.cuname'}.'.</b></p>');
           }
     } else {      } else {
         $r->print('Invalid username or domain');          $r->print('Invalid username or domain');
     }          }    
 }  }
   
 # ======================================================= Menu Phase Two Enroll  sub setup_date_selectors {
       my ($starttime,$endtime) = @_;
       if (! defined($starttime)) {
           $starttime = time;
           if (exists($ENV{'course.'.$ENV{'request.course.id'}.
                               '.default_enrollment_start_date'})) {
               $starttime = $ENV{'course.'.$ENV{'request.course.id'}.
                                     '.default_enrollment_start_date'};
           }
       }
       if (! defined($endtime)) {
           $endtime = time+(6*30*24*60*60); # 6 months from now, approx
           if (exists($ENV{'course.'.$ENV{'request.course.id'}.
                               '.default_enrollment_end_date'})) {
               $endtime = $ENV{'course.'.$ENV{'request.course.id'}.
                                   '.default_enrollment_end_date'};
           }
       }
       my $startdateform = &Apache::lonhtmlcommon::date_setter('studentform',
                                                               'startdate',
                                                               $starttime);
       my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform',
                                                             'enddate',
                                                             $endtime);
       return ($startdateform,$enddateform);
   }
   
   sub get_dates_from_form {
       my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate');
       my $enddate   = &Apache::lonhtmlcommon::get_date_from_form('enddate');
       if ($ENV{'form.no_end_date'}) {
           $enddate = 0;
       }
       return ($startdate,$enddate);
   }
   
   sub date_setting_table {
       my ($starttime,$endtime) = @_;
       my ($startform,$endform)=&setup_date_selectors($starttime,$endtime);
       my $dateDefault = '<nobr>'.
           '<input type="checkbox" name="makedatesdefault" />'.
           ' make these dates the default for future enrollment';
       my $perpetual = '<nobr><input type="checkbox" name="no_end_date"';
       if (defined($endtime) && $endtime == 0) {
           $perpetual .= ' checked';
       }
       $perpetual.= ' />'.' no ending date</nobr>';
       my $result = '';
       $result .= "<table>\n";
       $result .= '<tr><td align="right">Starting Date</td>'.
           '<td>'.$startform.'</td>'.
           '<td>'.$dateDefault.'</td>'."</tr>\n";
       $result .= '<tr><td align="right">Ending Date</td>'.
           '<td>'.$endform.'</td>'.
           '<td>'.$perpetual.'</td>'."</tr>\n";
       $result .= "</table>\n";
       return $result;
   }
   
   sub make_dates_default {
       my ($startdate,$enddate) = @_;
       my $result = '';
       my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
       my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
       my $put_result = &Apache::lonnet::put('environment',
               {'default_enrollment_start_date'=>$startdate,
                'default_enrollment_end_date'  =>$enddate},$dom,$crs);
       if ($put_result eq 'ok') {
           $result .= "Set default start and end dates for course<br />";
           #
           # Refresh the course environment
           &Apache::lonnet::coursedescription($ENV{'request.course.id'});
       } else {
           $result .= "Unable to set default dates for course:".$put_result.
               '<br />';
       }
       return $result;
   }
   
   ##
   ## Single student enrollment routines (some of them)
   ##
   sub get_student_username_domain_form {
       my $r = shift;
       my $domform = &Apache::loncommon::select_dom_form
           ($ENV{'course.'.$ENV{'request.course.id'}.'.domain'},'cudomain',0);
       $r->print(<<END);
   <input type="hidden" name="action" value="enrollstudent" />
   <input type="hidden" name="state"  value="gotusername" />
   <h3>Enroll One Student</h3>
   <table>
   <tr><th>Username:</th>
       <td><input type="text" name="cuname"  size="15" /></td></tr>
   <tr><th>Domain:</th>
       <td>$domform</td></tr>
   <tr><th>&nbsp;</th>
       <td>
       <input type="submit" name="Begin Enrollment" value="Begin Enrollment" />
       </td></tr>
   </table>
   END
       return;
   }
   
 sub print_enroll_single_student_form {  sub print_enroll_single_student_form {
     my $r=shift;      my $r=shift;
     $r->print("<h3>Enroll One Student</h3>");      $r->print("<h3>Enroll One Student</h3>");
     my ($krbdefdom) = $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/;      #
     $krbdefdom=~tr/a-z/A-Z/;      my $username = $ENV{'form.cuname'};
     my $today    = time;      my $domain   = $ENV{'form.cudomain'};
     my $halfyear = $today+15552000;      my $home = &Apache::lonnet::homeserver($username,$domain);
     my $defdom=$r->dir_config('lonDefDomain');      # $new_user flags whether we are creating a new user or using an old one
     my $javascript_validations=&javascript_validations($krbdefdom);      my $new_user = 1;
     # Set up authentication forms      if ($home ne 'no_host') {
     my %param = ( formname => 'document.studentform');          $new_user = 0;
     my $krbform = &Apache::loncommon::authform_kerberos(%param);      }
     my $intform = &Apache::loncommon::authform_internal(%param);      #
     my $locform = &Apache::loncommon::authform_local(%param);      my $user_data_html = '';
     # Set up domain selection form      my $javascript_validations = '';
     my $domform = &domain_form($defdom);      if ($new_user) {
     # Print it all out          my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
           # Set up authentication forms
           my ($krbdef,$krbdefdom) =
               &Apache::loncommon::get_kerberos_defaults($domain);
           $javascript_validations=&javascript_validations('auth',$krbdefdom);
           my %param = ( formname => 'document.studentform',
                         kerb_def_dom => $krbdefdom,
                         kerb_def_auth => $krbdef
                         );
           my $krbform = &Apache::loncommon::authform_kerberos(%param);
           my $intform = &Apache::loncommon::authform_internal(%param);
           my $locform = &Apache::loncommon::authform_local(%param);
           #
           # Set up domain selection form
           my $homeserver_form = '';
           my %servers = &Apache::loncommon::get_library_servers($domain);
           $homeserver_form = '<select name="lcserver" size="1">'."\n".
               '<option value="default" selected>default</option>'."\n";
           while (my ($servername,$serverdescription) = each (%servers)) {
               $homeserver_form .= '<option value="'.$servername.'">'.
                   $serverdescription."</option>\n";
           }
           $homeserver_form .= "</select>\n";
           #
           #
           $user_data_html = <<END;
   <h3>User Data for $username\@$domain</h3>
   <table>
   <tr><th>First Name:</th>
       <td><input type="text" name="cfirst"  size="15"></td></tr>
   <tr><th>Middle Name:</th>
       <td><input type="text" name="cmiddle" size="15"></td></tr>
   <tr><th>Last Name:</th>
       <td><input type="text" name="clast"   size="15"></td></tr>
   <tr><th>Generation:</th>
       <td><input type="text" name="cgen"    size="5"> </td></tr>
   <tr><th>Home Server:</th>
       <td>$homeserver_form</td></tr>
   </table>
   <h3>Password</h3>
   Please select an authentication mechanism
   <table>
   <p>
   $krbform
   <br />
   $intform
   <br />
   $locform
   </p>
   END
       } else {
           # User already exists.  Do not worry about authentication
           my %uenv = &Apache::lonnet::dump('environment',$domain,$username);
           $javascript_validations = &javascript_validations('noauth');
           $user_data_html = <<END;
   <h3>User Data for $username\@$domain</h3>
   <input type="hidden" name="lcserver" value="default" />
   <table>
   <tr><th>First Name:</th>
       <td>
       <input type="text" name="cfirst" value="$uenv{'firstname'}" size="15" />
       </td></tr>
   <tr><th>Middle Name:</th>
       <td>
       <input type="text" name="cmiddle" value="$uenv{'middlename'}" size="15" />
       </td></tr>
   <tr><th>Last Name:</th>
       <td>
       <input type="text" name="clast"value="$uenv{'lastname'}" size="15" />
       </td></tr>
   <tr><th>Generation:</th>
       <td>
       <input type="text" name="cgen" value="$uenv{'generation'}" size="5" />
       </td></tr>
   </table>
   END
       }
       my $date_table = &date_setting_table();
           # Print it all out
     $r->print(<<END);      $r->print(<<END);
 <input type="hidden" name="action" value="enrollstudent">  <input type="hidden" name="action" value="enrollstudent" />
 <input type="hidden" name="state"  value="done">  <input type="hidden" name="state"  value="done" />
   <input type="hidden" name="cuname" value="$username" />
   <input type="hidden" name="lcdomain" value="$domain" />
 <script type="text/javascript" language="Javascript">  <script type="text/javascript" language="Javascript">
 function verify(vf) {  function verify(vf) {
     var founduname=0;      var founduname=0;
Line 682  function clearpwd(vf) { Line 907  function clearpwd(vf) {
 }  }
   
 </script>  </script>
 <h3>Personal Data</h3>  
 <table>  
 <tr><td>First Name:</td><td> <input type="text" name="cfirst"  size="15"></td></tr>  
 <tr><td>Middle Name:</td><td> <input type="text" name="cmiddle" size="15"></td></tr>  
 <tr><td>Last Name: </td><td><input type="text" name="clast"   size="15"></td></tr>  
 <tr><td>Generation: </td><td><input type="text" name="cgen"    size="5"> </td></tr>  
 </table>  
   
 <h3>Login Data</h3>  $user_data_html
 <p>Username: <input type="text" name="cuname"  size="15"></p>  
 <p>Domain:   $domform</p>  
 <p>Note: login settings below  will not take effect if the user already exists  
 </p><p>  
 $krbform  
 </p><p>  
 $intform  
 </p><p>  
 $locform  
 </p><p>  
   
 <h3>Course Data</h3>  <h3>Course Data</h3>
   
 <p>Group/Section: <input type="text" name="csec" size="5" />  <p>Group/Section: <input type="text" name="csec" size="5" />
 <p>  <p>
 <!-- Date setting form elements -->  $date_table
 <input type="hidden" name="pres_value"  value='' />  
 <input type="hidden" name="pres_type"   value='' />  
 <input type="hidden" name="pres_marker" value='' />  
 <input type="hidden" name="startdate"   value='$today'    />  
 <input type="hidden" name="enddate"     value='$halfyear' />  
 </p><p>  
 <a   
  href="javascript:pjump('date_start','Enrollment Starting Date',document.studentform.startdate.value,'start','studentform.pres','dateset');"  
 >Set Starting Date</a>  
 </p><p>  
 <a   
  href="javascript:pjump('date_end','Enrollment Ending Date',document.studentform.enddate.value,'end','studentform.pres','dateset');"  
 >Set Ending Date</a>  
 </p>  </p>
 <h3>ID/Student Number</h3>  <h3>ID/Student Number</h3>
 <p>  <p>
Line 765  sub print_html_classlist { Line 960  sub print_html_classlist {
 <input type="hidden" name="action" value="$ENV{'form.action'}" />  <input type="hidden" name="action" value="$ENV{'form.action'}" />
 <input type="hidden" name="state"  value="" />  <input type="hidden" name="state"  value="" />
 <p>  <p>
 <font size="+1">Current Classlist</font>  <font size="+1">Current Class List</font>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 END  END
     if ($ENV{'form.action'} ne 'modifystudent') {      if ($ENV{'form.action'} ne 'modifystudent') {
         $r->print(<<END);          $r->print(<<END);
 <font size="+1">  <font size="+1">
 <a href="javascript:document.studentform.state.value='csv';document.studentform.submit();">CSV format</a>  <a href="javascript:document.studentform.state.value='csv';document.studentform.submit();">CSV format</a>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 <a href="javascript:document.studentform.state.value='excel';document.studentform.submit();">Excel format</a>  <a href="javascript:document.studentform.state.value='excel';document.studentform.submit();">Excel format</a>
 </font>  </font>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
   Student Status:
 END  END
     }      }
     $r->print($status_select."</p>\n");      $r->print($status_select."</p>\n");
Line 868  END Line 1065  END
         $excel_workbook->set_tempdir('/home/httpd/perl/tmp');          $excel_workbook->set_tempdir('/home/httpd/perl/tmp');
         $excel_sheet = $excel_workbook->addworksheet('classlist');          $excel_sheet = $excel_workbook->addworksheet('classlist');
         #          #
         my $description = 'Classlist for '.          my $description = 'Class List for '.
             $ENV{'course.'.$ENV{'request.course.id'}.'.description'};              $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
         $excel_sheet->write($row++,0,$description);          $excel_sheet->write($row++,0,$description);
         #          #
Line 980  sub print_modify_student_form { Line 1177  sub print_modify_student_form {
     }      }
     # determine the students starting and ending times and section      # determine the students starting and ending times and section
     my ($starttime,$endtime,$section) = &get_enrollment_data($sname,$sdom);      my ($starttime,$endtime,$section) = &get_enrollment_data($sname,$sdom);
       if ($starttime =~ /^error/) {
           $r->print('<h2>Error</h2>');
           $r->print('<p>'.$starttime.'</p>');
           return;
       }
     # Deal with date forms      # Deal with date forms
     my $startdateform = &Apache::lonhtmlcommon::date_setter('studentform',      my $date_table = &date_setting_table($starttime,$endtime);
                                                             'startdate',  
                                                             $starttime);  
     my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform',  
                                                           'enddate',  
                                                           $endtime);  
     #      #
     if (! exists($ENV{'form.Status'}) ||       if (! exists($ENV{'form.Status'}) || 
         $ENV{'form.Status'} !~ /^(Any|Expired|Active)$/) {          $ENV{'form.Status'} !~ /^(Any|Expired|Active)$/) {
Line 1026  Disable ID/Student Number Safeguard and Line 1223  Disable ID/Student Number Safeguard and
 (only do if you know what you are doing)  (only do if you know what you are doing)
 </p><p>  </p><p>
 <b>Section</b>: <input type="text" name="section" value="$section" size="4"/>  <b>Section</b>: <input type="text" name="section" value="$section" size="4"/>
 </p><p>  
 <table>  
 <tr><td align="right"><b>Starting Date:</b></td><td>$startdateform</td></tr>  
 <tr><td align="right"><b>Ending Date:</b></td><td>$enddateform</td></tr>  
 </table>  
 </p>  </p>
   <p>$date_table</p>
 <input type="submit" value="Submit Modifications" />  <input type="submit" value="Submit Modifications" />
 </body></html>  </body></html>
 END  END
Line 1043  END Line 1236  END
 #  #
 sub modify_single_student {  sub modify_single_student {
     my $r = shift;      my $r = shift;
       #
       # Remove non alphanumeric values from the section
       $ENV{'form.section'} =~ s/\W//g;
       #
       # Do the date defaults first
       my ($starttime,$endtime) = &get_dates_from_form();
       if ($ENV{'form.makedatesdefault'}) {
           $r->print(&make_dates_default($starttime,$endtime));
       }
     # Get the 'sortby' and 'Status' variables so the user goes back to their      # Get the 'sortby' and 'Status' variables so the user goes back to their
     # previous screen      # previous screen
     my $sortby = $ENV{'form.sortby'};      my $sortby = $ENV{'form.sortby'};
Line 1075  sub modify_single_student { Line 1277  sub modify_single_student {
     my $section    = $ENV{'form.section'};      my $section    = $ENV{'form.section'};
     my $courseid   = $ENV{'request.course.id'};      my $courseid   = $ENV{'request.course.id'};
     my $sid        = $ENV{'form.id'};      my $sid        = $ENV{'form.id'};
     my $starttime = &Apache::lonhtmlcommon::get_date_from_form('startdate',  
                                                                time);  
     my $endtime   = &Apache::lonhtmlcommon::get_date_from_form('enddate',  
                                                                time);  
     my $displayable_starttime = localtime($starttime);      my $displayable_starttime = localtime($starttime);
     my $displayable_endtime   = localtime($endtime);      my $displayable_endtime   = localtime($endtime);
     #       # 
     # check for forceid override      # check for forceid override
     if (($sid ne $old{'id'}) && (! exists($ENV{'form.forceid'}))) {      if ((defined($old{'id'})) && ($old{'id'} ne '') && 
           ($sid ne $old{'id'}) && (! exists($ENV{'form.forceid'}))) {
         $r->print("<font color=\"ff0000\">You changed the students id ".          $r->print("<font color=\"ff0000\">You changed the students id ".
                   " but did not disable the ID change safeguard.".                    " but did not disable the ID change safeguard.".
                   "  The students id will not be changed.</font>");                    "  The students id will not be changed.</font>");
Line 1128  sub modify_single_student { Line 1327  sub modify_single_student {
 </table>  </table>
 <h3>Role Information</h3>  <h3>Role Information</h3>
 <table>  <table>
 <tr><td>Start Time  </td><td> $displayable_starttime </td></tr>  <tr><td align="right"><b>Start Time:</b></td><td> $displayable_starttime </td></tr>
 <tr><td>End Time    </td><td> $displayable_endtime   </td></tr>  <tr><td align="right"><b>End Time:</b></td><td> $displayable_endtime   </td></tr>
 </table>  </table>
 <p>  <p>
 END  END
     #      #
     # Send request(s) to modify data      # Send request(s) to modify data (final undef is for 'desiredhost',
       # which is a moot point because the student already has an account.
       my $modify_section_results = &modifystudent($sdom,$slogin,
                                                   $ENV{'request.course.id'},
                                                   $section,undef);
       if ($modify_section_results !~ /^ok/) {
           $r->print("An error occured during the attempt to change the ".
                     "section for this student.<br />");
       }
     my $roleresults = &Apache::lonnet::modifystudent      my $roleresults = &Apache::lonnet::modifystudent
         ($sdom,$slogin,$sid,undef,undef,$firstname,$middlename,$lastname,          ($sdom,$slogin,$sid,undef,undef,$firstname,$middlename,$lastname,
          $generation,$section,$endtime,$starttime,$ENV{'form.forceid'});           $generation,$section,$endtime,$starttime,$ENV{'form.forceid'});
Line 1174  sub get_enrollment_data { Line 1381  sub get_enrollment_data {
     my %roles = &Apache::lonnet::dump('roles',$sdomain,$sname);      my %roles = &Apache::lonnet::dump('roles',$sdomain,$sname);
     my ($tmp) = keys(%roles);      my ($tmp) = keys(%roles);
     # Bail out if we were unable to get the students roles      # Bail out if we were unable to get the students roles
     return "666" if ($tmp =~ /^(con_lost|error|no_such_host)/i);      return ('error'.$tmp) if ($tmp =~ /^(con_lost|error|no_such_host)/i);
     # Go through the roles looking for enrollment in this course      # Go through the roles looking for enrollment in this course
     my ($end,$start) = (undef,undef);      my ($end,$start) = (undef,undef);
     my $section = '';      my $section = '';
     my $count = scalar(keys(%roles));      my $count = scalar(keys(%roles));
     while (my ($course,$role) = each(%roles)) {      while (my ($course,$role) = each(%roles)) {
         &Apache::lonnet::logthis('course = '.$course.' role = '.$role);  
         if ($course=~ /^\/$courseid\/*\s*(\w+)*_st$/ ) {          if ($course=~ /^\/$courseid\/*\s*(\w+)*_st$/ ) {
             #              #
             # Get active role              # Get active role
Line 1343  END Line 1549  END
 #  #
 sub print_first_courselist_upload_form {  sub print_first_courselist_upload_form {
     my $r=shift;      my $r=shift;
     my $upfile_select=&Apache::loncommon::upfile_select_html();      my $str;
     my $create_classlist_help =       $str  = '<input type="hidden" name="phase" value="two">';
  &Apache::loncommon::help_open_topic("Course_Create_Class_List",      $str .= '<input type="hidden" name="action" value="upload" />';
            "How do I create a class list from a spreadsheet");      $str .= '<input type="hidden"   name="state"  value="got_file" />';
     my $create_csv_help =      $str .= "<h3>".&mt('Upload a class list')."</h3>\n";
  &Apache::loncommon::help_open_topic("Course_Convert_To_CSV",      $str .= &Apache::loncommon::upfile_select_html();
            "How do I create a CSV file from a spreadsheet");      $str .= "<p>\n";
     $r->print(<<ENDUPFORM);      $str .= '<input type="submit" name="fileupload" value="'.
 <input type=hidden name=phase value=two>          &mt('Upload class list').'">'."\n";
 <h3>Upload a courselist</h3>      $str .= '<input type="checkbox" name="noFirstLine" /> '.
 $upfile_select          &mt('Ignore First Line')."</p>\n";
 <p>      $str .= &Apache::loncommon::help_open_topic("Course_Create_Class_List",
 <input type=submit name="fileupload" value="Upload Courselist">                           "How do I create a class list from a spreadsheet").
 <input type="hidden" name="action" value="upload" />                               "<br />\n";
 <input type="hidden" name="state"  value="got_file" />      $str .= &Apache::loncommon::help_open_topic("Course_Convert_To_CSV",
 </p>                             "How do I create a CSV file from a spreadsheet").
 $create_classlist_help <br />                                 "<br />\n";
 $create_csv_help      $str .= "</body>\n</html>\n";
 </body></html>      $r->print($str);
 ENDUPFORM  
     return;      return;
 }  }
   
Line 1371  sub upfile_drop_add { Line 1576  sub upfile_drop_add {
     my $r=shift;      my $r=shift;
     &Apache::loncommon::load_tmp_file($r);      &Apache::loncommon::load_tmp_file($r);
     my @studentdata=&Apache::loncommon::upfile_record_sep();      my @studentdata=&Apache::loncommon::upfile_record_sep();
       if($ENV{'form.noFirstLine'}){shift(@studentdata);}
     my @keyfields = split(/\,/,$ENV{'form.keyfields'});      my @keyfields = split(/\,/,$ENV{'form.keyfields'});
     my $cid = $ENV{'request.course.id'};      my $cid = $ENV{'request.course.id'};
     my %fields=();      my %fields=();
Line 1384  sub upfile_drop_add { Line 1590  sub upfile_drop_add {
         }          }
     }      }
     #      #
     my $startdate = $ENV{'form.startdate'};      my ($startdate,$enddate) = &get_dates_from_form();
     my $enddate   = $ENV{'form.enddate'};      if ($ENV{'form.makedatesdefault'}) {
     if ($startdate=~/\D/) { $startdate=''; }          $r->print(&make_dates_default($startdate,$enddate));
     if ($enddate=~/\D/)   { $enddate=''; }      }
     # Determine domain and desired host (home server)      # Determine domain and desired host (home server)
     my $domain=$ENV{'form.lcdomain'};      my $domain=$ENV{'form.lcdomain'};
     my $desiredhost = $ENV{'form.lcserver'};      my $desiredhost = $ENV{'form.lcserver'};
Line 1396  sub upfile_drop_add { Line 1602  sub upfile_drop_add {
     } else {      } else {
         my %home_servers = &Apache::loncommon::get_library_servers($domain);          my %home_servers = &Apache::loncommon::get_library_servers($domain);
         if (! exists($home_servers{$desiredhost})) {          if (! exists($home_servers{$desiredhost})) {
             $r->print('<font color="#ff0000">Error:</font>'.              $r->print('<font color="#ff0000">'.&mt('Error').'</font>'.
                       'Invalid home server specified');                        &mt('Invalid home server specified'));
               $r->print("</body>\n</html>\n");
             return;              return;
         }          }
     }      }
Line 1419  sub upfile_drop_add { Line 1626  sub upfile_drop_add {
             $genpwd=$ENV{'form.locarg'};              $genpwd=$ENV{'form.locarg'};
         }          }
     }      }
       if ($amode =~ /^krb/) {
           if (! defined($genpwd) || $genpwd eq '') {
               $r->print('<font color="red" size="+1">'.
                         &mt('Unable to enroll students').'</font>  '.
                         &mt('No Kerberos domain was specified.').'</p>');
               $amode = ''; # This causes the loop below to be skipped
           }
       }
     unless (($domain=~/\W/) || ($amode eq '')) {      unless (($domain=~/\W/) || ($amode eq '')) {
         #######################################          #######################################
         ##         Enroll Students           ##          ##         Enroll Students           ##
         #######################################          #######################################
         $r->print('<h3>Enrolling Students</h3>');          $r->print('<h3>'.&mt('Enrolling Students')."</h3>\n<p>\n");
         my $count=0;          my $count=0;
         my $flushc=0;          my $flushc=0;
         my %student=();          my %student=();
Line 1452  sub upfile_drop_add { Line 1667  sub upfile_drop_add {
                     }                      }
                 }                  }
                 if ($entries{$fields{'username'}}=~/\W/) {                  if ($entries{$fields{'username'}}=~/\W/) {
                     $r->print('<p><b>Unacceptable username: '.                      $r->print('<br />'.
                               $entries{$fields{'username'}}.' for user '.        &mt('<b>[_1]</b>: Unacceptable username for user [_2] [_3] [_4] [_5]',
                               $fname.' '.$mname.' '.$lname.' '.$gen.'</b><p>');            $entries{$fields{'username'}},$fname,$mname,$lname,$gen).
                                 '</b>');
                 } else {                  } else {
                     # determine section number                      # determine section number
                     my $sec='';                      my $sec='';
Line 1464  sub upfile_drop_add { Line 1680  sub upfile_drop_add {
                             $sec=$entries{$fields{'sec'}};                              $sec=$entries{$fields{'sec'}};
                         }                          }
                     }                      }
                       # remove non alphanumeric values from section
                       $sec =~ s/\W//g;
                     # determine student id number                      # determine student id number
                     my $id='';                      my $id='';
                     if (defined($fields{'id'})) {                      if (defined($fields{'id'})) {
Line 1472  sub upfile_drop_add { Line 1690  sub upfile_drop_add {
                         }                          }
                         $id=~tr/A-Z/a-z/;                          $id=~tr/A-Z/a-z/;
                     }                      }
                       # determine email address
                       my $email='';
                       if (defined($fields{'email'})) {
                           if (defined($entries{$fields{'email'}})) {
                               $email=$entries{$fields{'email'}};
                               unless ($email=~/^[^\@]+\@[^\@]+$/) { $email=''; }
                           }
                       }
                     # determine student password                      # determine student password
                     my $password='';                      my $password='';
                     if ($genpwd) {                       if ($genpwd) { 
Line 1488  sub upfile_drop_add { Line 1714  sub upfile_drop_add {
                              \$lname,\$gen,\$sec) {                               \$lname,\$gen,\$sec) {
                         $$_ =~ s/(\s+$|^\s+)//g;                          $$_ =~ s/(\s+$|^\s+)//g;
                     }                      }
                     if ($password) {                      if ($password || $ENV{'form.login'} eq 'loc') {
                         &modifystudent($domain,$username,$cid,$sec,                          &modifystudent($domain,$username,$cid,$sec,
                                        $desiredhost);                                         $desiredhost);
                         my $reply=&Apache::lonnet::modifystudent                          my $reply=&Apache::lonnet::modifystudent
                             ($domain,$username,$id,$amode,$password,                              ($domain,$username,$id,$amode,$password,
                              $fname,$mname,$lname,$gen,$sec,$enddate,                               $fname,$mname,$lname,$gen,$sec,$enddate,
                              $startdate,$ENV{'form.forceid'},$desiredhost);                               $startdate,$ENV{'form.forceid'},$desiredhost,
                                $email);
                         if ($reply ne 'ok') {                          if ($reply ne 'ok') {
                             $r->print('<p><b>'.                              $reply =~ s/^error://;
                                       'Error enrolling '.$username.': '.                              $r->print('<br />'.
                                       $reply.'</b></p>');                  &mt('<b>[_1]</b>:  Unable to enroll: [_2]',$username,$reply));
           } else {            } else {
                             $count++; $flushc++;                              $count++; $flushc++;
                             $student{$username}=1;                              $student{$username}=1;
Line 1509  sub upfile_drop_add { Line 1736  sub upfile_drop_add {
                             }                              }
                         }                          }
                     } else {                      } else {
                         $r->print("<p><b>No password for $username</b><p>");                          $r->print('<br />'.
         &mt('<b>[_1]</b>: Unable to enroll.  No password specified.',$username)
                                     );
                     }                      }
                 }                  }
             }              }
         } # end of foreach (@studentdata)          } # end of foreach (@studentdata)
         $r->print('<p>Processed Students: '.$count.'</p>');          $r->print("</p>\n<p>\n".&mt('Processed [_1] student(s).',$count).
         $r->print("<p>If active, the new role will be available when the ".                    "</p>\n");
                   "students next log in to LON-CAPA.</p>");          $r->print("<p>\n".
                     &mt('If active, the new role will be available when the '.
                     'students next log in to LON-CAPA.')."</p>\n");
         #####################################          #####################################
         #           Drop students           #          #           Drop students           #
         #####################################          #####################################
         if ($ENV{'form.fullup'} eq 'yes') {          if ($ENV{'form.fullup'} eq 'yes') {
             $r->print('<h3>Dropping Students</h3>');              $r->print('<h3>'.&mt('Dropping Students')."</h3>\n");
             #  Get current classlist              #  Get current classlist
             my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();              my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();
             if (! defined($classlist)) {              if (! defined($classlist)) {
                 $r->print("There are no students currently enrolled.\n");                  $r->print(&mt('There are no students currently enrolled.').
                             "\n");
             } else {              } else {
                 # Remove the students we just added from the list of students.                  # Remove the students we just added from the list of students.
                 foreach (@studentdata) {                  foreach (@studentdata) {
Line 1558  sub drop_student_list { Line 1790  sub drop_student_list {
         # drop student          # drop student
         my $result = &modifystudent($udom,$uname,$ENV{'request.course.id'});          my $result = &modifystudent($udom,$uname,$ENV{'request.course.id'});
         if ($result eq 'ok' || $result eq 'ok:') {          if ($result eq 'ok' || $result eq 'ok:') {
             $r->print('Dropped '.$uname.' @ '.$udom.'<br>');              $r->print(&mt('Dropped [_1]',$uname.'@'.$udom).'<br>');
             $count++;              $count++;
         } else {          } else {
             $r->print('Error dropping '.$uname.' @ '.$udom.': '.$result.              $r->print(
             &mt('Error dropping [_1]:[_2]',$uname.'@'.$udom,$result).
                       '<br />');                        '<br />');
         }          }
     }      }
     $r->print('<p><b>Dropped '.$count.' student(s).</b>');      $r->print('<p><b>'.&mt('Dropped [_1] student(s).',$count).'</b></p>');
     $r->print('<p>Re-enrollment will re-activate data.') if ($count);      $r->print('<p>'.&mt('Re-enrollment will re-activate data.')) if ($count);
 }  }
   
 ###################################################################  ###################################################################
Line 1590  The response to the request is governed Line 1823  The response to the request is governed
  upload           enrolling      enroll students based on upload   upload           enrolling      enroll students based on upload
  drop             undefined      print the classlist ready to drop   drop             undefined      print the classlist ready to drop
  drop             done           drop the selected students   drop             done           drop the selected students
  enrollstudent    undefined      print single student enroll menu   enrollstudent    undefined      print student username domain form
    enrollstudent    gotusername    print single student enroll menu
  enrollstudent    enrolling      enroll student   enrollstudent    enrolling      enroll student
  classlist        undefined      print html classlist   classlist        undefined      print html classlist
  classlist        csv            print csv classlist   classlist        csv            print csv classlist
Line 1605  The response to the request is governed Line 1839  The response to the request is governed
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
     if ($r->header_only) {      if ($r->header_only) {
         $r->content_type('text/html');          &Apache::loncommon::content_type($r,'text/html');
         $r->send_http_header;          $r->send_http_header;
         return OK;          return OK;
     }      }
Line 1626  sub handler { Line 1860  sub handler {
         $r->content_type('text/csv');          $r->content_type('text/csv');
     } else {      } else {
         # Start page          # Start page
         $r->content_type('text/html');          &Apache::loncommon::content_type($r,'text/html');
         $r->send_http_header;          $r->send_http_header;
         $r->print(&header());          $r->print(&header());
     }      }
Line 1658  sub handler { Line 1892  sub handler {
         }          }
     } elsif ($ENV{'form.action'} eq 'enrollstudent') {      } elsif ($ENV{'form.action'} eq 'enrollstudent') {
         if (! exists($ENV{'form.state'})) {          if (! exists($ENV{'form.state'})) {
               &get_student_username_domain_form($r);
           } elsif ($ENV{'form.state'} eq 'gotusername') {
             &print_enroll_single_student_form($r);              &print_enroll_single_student_form($r);
         } elsif ($ENV{'form.state'} eq 'enrolling') {          } elsif ($ENV{'form.state'} eq 'enrolling') {
             &enroll_single_student($r);              &enroll_single_student($r);
         } else {          } else {
             &print_enroll_single_student_form($r);              &get_student_username_domain_form($r);
         }          }
     } elsif ($ENV{'form.action'} eq 'classlist') {      } elsif ($ENV{'form.action'} eq 'classlist') {
         if (! exists($ENV{'form.state'})) {          if (! exists($ENV{'form.state'})) {

Removed from v.1.60  
changed lines
  Added in v.1.89


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