Diff for /loncom/interface/Attic/londropadd.pm between versions 1.62 and 1.78

version 1.62, 2002/12/03 20:30:48 version 1.78, 2003/07/25 18:51:18
Line 79  sub modifystudent { Line 79  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 ($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 151  sub print_main_menu { Line 154  sub print_main_menu {
 </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">View Class List</a>
 </font>  </font>
 </p><p>  </p><p>
 <font size="+1">  <font size="+1">
Line 213  sub javascript_validations { Line 216  sub javascript_validations {
     my %param = ( formname => 'studentform',      my %param = ( formname => 'studentform',
                   kerb_def_dom => $krbdefdom );                    kerb_def_dom => $krbdefdom );
     my $authheader = &Apache::loncommon::authform_header(%param);      my $authheader = &Apache::loncommon::authform_header(%param);
       my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
     return (<<ENDPICK);      return (<<ENDPICK);
 function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec) {  function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) {
     var foundatype=0;      var foundatype=0;
     var message='';      var message='';
     if (founduname==0) {      if (founduname==0) {
Line 250  function verify_message (vf,founduname,f Line 254  function verify_message (vf,founduname,f
         }          }
     }      }
   
     if (foundname==0) { message='No name fields specified. '; }      if (foundname==0) { message='name fields'; }
     if (foundid==0) { message+='No ID or student number field specified. '; }      if (foundid==0) { if (message!='') { message+=', '; } message+='student number field'; }
     if (foundsec==0) { message+='No section or group field specified. '; }      if (foundsec==0) {  if (message!='') { message+=', '; } message+='section or group field'; }
     if (vf.startdate.value=='') {      if (foundemail==0) {  if (message!='') { message+=', '; } message+='email address field'; }
  message+='No starting date set. ';  
     }  
     if (vf.enddate.value=='') {  
         message+='No ending date set. ';  
     }  
     if ((vf.enddate.value!='') && (vf.startdate.value!='')) {  
        if (Math.round(vf.enddate.value)<Math.round(vf.startdate.value)) {  
           alert('Ending date is before starting date');  
           return;  
        }  
     }  
     if (message!='') {      if (message!='') {
        message+='Continue enrollment?';         message='Not specified (optional): '+message+'.  Continue enrollment?';
        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();
     }      }
 }  }
   
   $authheader
   ENDPICK
   
     function pclose() {  }
         parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",  
                  "height=350,width=350,scrollbars=no,menubar=no");  
         parmwin.close();  
     }  
   
     function pjump(type,dis,value,marker,ret,call) {  
         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");  
   
   sub javascript_validations_without_auth {
       my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
       return (<<ENDPICK);
   function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) {
       var foundatype=0;
       var message='';
       if (founduname==0) {
    alert('You need to specify the username field');
           return;
     }      }
       if (foundname==0) { message='name fields'; }
     function dateset() {      if (foundid==0) { if (message!='') { message+=', '; } message+='student number field'; }
         if (document.studentform.pres_marker.value=='end') {      if (foundsec==0) {  if (message!='') { message+=', '; } message+='section or group field'; }
            document.studentform.enddate.value=      if (foundemail==0) {  if (message!='') { message+=', '; } message+='email address field'; }
        document.studentform.pres_value.value;      if (message!='') {
         }         message='Not specified (optional): '+message+'.  Continue enrollment?';
         if (document.studentform.pres_marker.value=='start') {         if (confirm(message)) {
            document.studentform.startdate.value=            vf.state.value='enrolling';
        document.studentform.pres_value.value;    vf.submit();
         }         }
         pclose();      } else {
         vf.state.value='enrolling';
         vf.submit();
     }      }
   }
   
 $authheader  
 ENDPICK  ENDPICK
   
 }  }
Line 322  function verify(vf) { Line 315  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 330  function verify(vf) { Line 324  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 350  function verify(vf) { Line 345  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 461  ENDPICK Line 457  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>
Line 484  $locform Line 487  $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 522  sub print_upload_manager_form { Line 516  sub print_upload_manager_form {
     my @records=&Apache::loncommon::upfile_record_sep();      my @records=&Apache::loncommon::upfile_record_sep();
     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=$r->dir_config('lonDefDomain');
       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 540  sub print_upload_manager_form { Line 533  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 559  sub print_upload_manager_form { Line 553  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 whitespace from section
       $ENV{'form.csec'}=~s/(\s|:)//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 605  sub enroll_single_student { Line 611  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 625  sub enroll_single_student { Line 631  sub enroll_single_student {
     }          }    
 }  }
   
 # ======================================================= 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
           ($r->dir_config('lonDefDomain'),'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);      &Apache::lonnet::logthis('home = '.$home);
     my $locform = &Apache::loncommon::authform_local(%param);      #
     # Set up domain selection form      my $user_data_html = '';
     my $domform = &domain_form($defdom);      my $javascript_validations = '';
     # Print it all out      if ($new_user) {
           my $defdom=$r->dir_config('lonDefDomain');
           # Set up authentication forms
           my ($krbdef,$krbdefdom) =
               &Apache::loncommon::get_kerberos_defaults($domain);
           $javascript_validations=&javascript_validations($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_without_auth();
           $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 683  function clearpwd(vf) { Line 872  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 766  sub print_html_classlist { Line 925  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') {
Line 871  END Line 1030  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 984  sub print_modify_student_form { Line 1143  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);
     # 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 1029  Disable ID/Student Number Safeguard and Line 1183  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 1046  END Line 1196  END
 #  #
 sub modify_single_student {  sub modify_single_student {
     my $r = shift;      my $r = shift;
       #
       # Remove whitespace from the section
       $ENV{'form.section'} =~ s/(\s|:)//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 1078  sub modify_single_student { Line 1237  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 1131  sub modify_single_student { Line 1287  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 1183  sub get_enrollment_data { Line 1347  sub get_enrollment_data {
     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 1387  sub upfile_drop_add { Line 1550  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 1426  sub upfile_drop_add { Line 1589  sub upfile_drop_add {
         #######################################          #######################################
         ##         Enroll Students           ##          ##         Enroll Students           ##
         #######################################          #######################################
         $r->print('<h3>Enrolling Students</h3>');          $r->print('<h3>Enrolling Students</h3>'."\n".'<p>');
         my $count=0;          my $count=0;
         my $flushc=0;          my $flushc=0;
         my %student=();          my %student=();
Line 1455  sub upfile_drop_add { Line 1618  sub upfile_drop_add {
                     }                      }
                 }                  }
                 if ($entries{$fields{'username'}}=~/\W/) {                  if ($entries{$fields{'username'}}=~/\W/) {
                     $r->print('<p><b>Unacceptable username: '.                      $r->print('<br /><b>Unacceptable username: '.
                               $entries{$fields{'username'}}.' for user '.                                $entries{$fields{'username'}}.' for user '.
                               $fname.' '.$mname.' '.$lname.' '.$gen.'</b><p>');                                $fname.' '.$mname.' '.$lname.' '.$gen.'</b>');
                 } else {                  } else {
                     # determine section number                      # determine section number
                     my $sec='';                      my $sec='';
Line 1467  sub upfile_drop_add { Line 1630  sub upfile_drop_add {
                             $sec=$entries{$fields{'sec'}};                              $sec=$entries{$fields{'sec'}};
                         }                          }
                     }                      }
                       # remove whitespace from section
                       $sec =~ s/(\s|:)//g;
                     # determine student id number                      # determine student id number
                     my $id='';                      my $id='';
                     if (defined($fields{'id'})) {                      if (defined($fields{'id'})) {
Line 1475  sub upfile_drop_add { Line 1640  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 1497  sub upfile_drop_add { Line 1670  sub upfile_drop_add {
                         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 /><b>'.$username.'</b>:'.
                                       $reply.'</b></p>');                                        '  Unable to enroll: '.$reply);
           } else {            } else {
                             $count++; $flushc++;                              $count++; $flushc++;
                             $student{$username}=1;                              $student{$username}=1;
Line 1512  sub upfile_drop_add { Line 1686  sub upfile_drop_add {
                             }                              }
                         }                          }
                     } else {                      } else {
                         $r->print("<p><b>No password for $username</b><p>");                          $r->print('<br /><b>'.$username.'</b>:'.
                              '  Unable to enroll: No password specified.');
                     }                      }
                 }                  }
             }              }
         } # end of foreach (@studentdata)          } # end of foreach (@studentdata)
         $r->print('<p>Processed Students: '.$count.'</p>');          $r->print('</p><p>Processed Students: '.$count.'</p>');
         $r->print("<p>If active, the new role will be available when the ".          $r->print("<p>If active, the new role will be available when the ".
                   "students next log in to LON-CAPA.</p>");                    "students next log in to LON-CAPA.</p>");
         #####################################          #####################################
Line 1593  The response to the request is governed Line 1768  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 1661  sub handler { Line 1837  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.62  
changed lines
  Added in v.1.78


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