Diff for /loncom/interface/Attic/londropadd.pm between versions 1.15 and 1.23

version 1.15, 2001/08/24 21:09:53 version 1.23, 2002/04/04 20:41:17
Line 1 Line 1
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 # Handler to drop and add students in courses   # Handler to drop and add students in courses 
 #  #
   # $Id$
   #
   # Copyright Michigan State University Board of Trustees
   #
   # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
   #
   # LON-CAPA is free software; you can redistribute it and/or modify
   # it under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2 of the License, or
   # (at your option) any later version.
   #
   # LON-CAPA is distributed in the hope that it will be useful,
   # but WITHOUT ANY WARRANTY; without even the implied warranty of
   # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   # GNU General Public License for more details.
   #
   # You should have received a copy of the GNU General Public License
   # along with LON-CAPA; if not, write to the Free Software
   # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   #
   # /home/httpd/html/adm/gpl.txt
   #
   # http://www.lon-capa.org/
   #
 # (Handler to set parameters for assessments  # (Handler to set parameters for assessments
 #  #
 # (Handler to resolve ambiguous file locations  # (Handler to resolve ambiguous file locations
Line 19 Line 43
 # YEAR=2001  # YEAR=2001
 # 01/01/01,01/15,02/10,02/13,02/14,02/22 Gerd Kortemeyer  # 01/01/01,01/15,02/10,02/13,02/14,02/22 Gerd Kortemeyer
 # 8/6 Scott Harrison  # 8/6 Scott Harrison
   # Guy Albertelli
   # 9/25 Gerd Kortemeyer
   # 12/19 Guy Albertelli
   # YEAR=2002
   # 1/4 Gerd Kortemeyer
   
 package Apache::londropadd;  package Apache::londropadd;
   
Line 100  sub record_sep { Line 129  sub record_sep {
     if ($ENV{'form.upfiletype'} eq 'xml') {      if ($ENV{'form.upfiletype'} eq 'xml') {
     } elsif ($ENV{'form.upfiletype'} eq 'space') {      } elsif ($ENV{'form.upfiletype'} eq 'space') {
         my $i=0;          my $i=0;
         map {          foreach (split(/\s+/,$record)) {
             my $field=$_;              my $field=$_;
             $field=~s/^(\"|\')//;              $field=~s/^(\"|\')//;
             $field=~s/(\"|\')$//;              $field=~s/(\"|\')$//;
             $components{$i}=$field;              $components{$i}=$field;
             $i++;              $i++;
         } split(/\s+/,$record);          }
     } elsif ($ENV{'form.upfiletype'} eq 'tab') {      } elsif ($ENV{'form.upfiletype'} eq 'tab') {
         my $i=0;          my $i=0;
         map {          foreach (split(/\t+/,$record)) {
             my $field=$_;              my $field=$_;
             $field=~s/^(\"|\')//;              $field=~s/^(\"|\')//;
             $field=~s/(\"|\')$//;              $field=~s/(\"|\')$//;
             $components{$i}=$field;              $components{$i}=$field;
             $i++;              $i++;
         } split(/\t+/,$record);                  }
     } else {      } else {
         my @allfields=split(/\,/,$record);          my @allfields=split(/\,/,$record);
         my $i=0;          my $i=0;
Line 144  sub dropstudent { Line 173  sub dropstudent {
      my ($udom,$unam,$courseid,$csec)=@_;       my ($udom,$unam,$courseid,$csec)=@_;
      $courseid=~s/\_/\//g;       $courseid=~s/\_/\//g;
      $courseid=~s/^(\w)/\/$1/;       $courseid=~s/^(\w)/\/$1/;
      map {       foreach (split(/\&/,
       &Apache::lonnet::reply('dump:'.$udom.':'.$unam.':roles',
        &Apache::lonnet::homeserver($unam,$udom)))) {
         my ($key,$value)=split(/\=/,$_);          my ($key,$value)=split(/\=/,$_);
         $key=&Apache::lonnet::unescape($key);          $key=&Apache::lonnet::unescape($key);
         if ($key=~/^$courseid(?:\/)*(\w+)*\_st$/) {          if ($key=~/^$courseid(?:\/)*(\w+)*\_st$/) {
           my $section=$1;            my $section=$1;
           if ($key eq $courseid.'_st') { $section=''; }            if ($key eq $courseid.'_st') { $section=''; }
           if ($section ne $csec) {            if (((!$section) && (!$csec)) || ($section ne $csec)) {
     my ($dummy,$end,$start)=split(/\_/,      my ($dummy,$end,$start)=split(/\_/,
                                     &Apache::lonnet::unescape($value));                                      &Apache::lonnet::unescape($value));
             my $now=time;              my $now=time;
Line 168  sub dropstudent { Line 199  sub dropstudent {
             }              }
   }    }
         }          }
     } split(/\&/,&Apache::lonnet::reply('dump:'.$udom.':'.$unam.':roles',      }
                                  &Apache::lonnet::homeserver($unam,$udom)));  
 }  }
   
 # ============================================================== Menu Phase One  # ============================================================== Menu Phase One
Line 197  sub menu_phase_one { Line 227  sub menu_phase_one {
 ENDUPFORM  ENDUPFORM
 }  }
   
 # ======================================================= Menu Phase Two Upload  
   
 sub menu_phase_two_upload {  
     my $r=shift;  
   
     my $datatoken=&upfile_store($r);  
   
     my @records=&upfile_record_sep();  
     my $total=$#records;  
     my $distotal=$total+1;  
       
     $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/;  
     my $krbdefdom=$1;  
     $krbdefdom=~tr/a-z/A-Z/;  
   
     my $today=time;  
     my $halfyear=$today+15552000;  
   
     my $defdom=$r->dir_config('lonDefDomain');  
   
   sub phase_two_header {
       my ($r,$datatoken,$distotal,$krbdefdom)=@_;
     $r->print(<<ENDPICK);      $r->print(<<ENDPICK);
 <input type=hidden name=phase value=three>  <input type=hidden name=phase value=three>
 <input type=hidden name=datatoken value="$datatoken">  <input type=hidden name=datatoken value="$datatoken">
 <input type=hidden name=upfiletype value=$ENV{'form.upfiletype'}>  <input type=hidden name=upfiletype value=$ENV{'form.upfiletype'}>
 <hr>  <hr>
 <h3>Identify fields</h3>  <h3>Identify fields</h3>
 Total number of records found in file: $distotal  Total number of records found in file: $distotal <hr />
   Enter as many fields as you can. The system will inform you and bring you back
   to this page if the data selected is insufficient to run your class.<hr />
 <script>  <script>
 function verify(vf) {  function verify(vf) {
     var founduname=0;      var founduname=0;
Line 393  function clickint(vf) { Line 408  function clickint(vf) {
 </script>  </script>
 <table border=2><tr><th>Field</th><th>Samples</th></tr>  <table border=2><tr><th>Field</th><th>Samples</th></tr>
 ENDPICK  ENDPICK
              my %sone; my %stwo; my %sthree;  }
              my $i=0;  
   
              if ($total>=0) {  sub phase_two_end {
                 %sone=&record_sep($records[0]);      my ($r,$i,$keyfields,$defdom,$today,$halfyear)=@_;
                 if ($total>=1) {      $r->print(<<ENDPICK);
                    %stwo=&record_sep($records[1]);  
                      
         }  
                 if ($total>=2) {  
                    %sthree=&record_sep($records[2]);  
         }  
                 map {  
                    $r->print('<tr><td><select name=f'.$i.  
                        ' onChange="flip(this.form,'.$i.');">');  
                    map {  
                       my ($value,$display)=split(/\:/,$_);  
                       $r->print('<option value='.$value.'>'.$display.  
                               '</option>');  
                    } ('none: ','username:Username',  
                       'names:Last Name, First Names',  
                       'fname:First Name','mname:Middle Names/Initials',  
                       'lname:Last Name','gen:Generation',  
                       'id:ID/Student Number','sec:Group/Section',  
                       'ipwd:Initial Password');  
                    $r->print('</select></td><td>');  
                    if (defined($sone{$_})) {   
                       $r->print($sone{$_}."</br>\n");   
                    }  
            if (defined($stwo{$_})) {   
                       $r->print($stwo{$_}."</br>\n");   
                    }  
            if (defined($sthree{$_})) {   
                       $r->print($sthree{$_}."</br>\n");   
                    }  
                    $r->print('</td></tr>');  
                    $i++;  
        } sort keys %sone;  
        $i--;  
      }  
              my $keyfields=join(',',sort keys %sone);  
              $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">
Line 473  LON-CAPA domain: <input type=text size=1 Line 451  LON-CAPA domain: <input type=text size=1
 <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>
   <h3>ID/Student Number</h3>
   <input type=checkbox name=forceid value=yes> 
   Disable ID/Student Number Safeguard and Force Change of Conflicting IDs
   (only do if you know what you are doing)<p>
 <input type=button onClick="verify(this.form)" value="Update Courselist"><br>  <input type=button onClick="verify(this.form)" value="Update Courselist"><br>
 Note: for large courses, this operation might be time consuming.  Note: for large courses, this operation might be time consuming.
 ENDPICK  ENDPICK
 }  }
   # ======================================================= Menu Phase Two Upload
   
   sub menu_phase_two_upload {
       my $r=shift;
   
       my $datatoken=&upfile_store($r);
   
       my @records=&upfile_record_sep();
       my $total=$#records;
       my $distotal=$total+1;
   
       $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/;
       my $krbdefdom=$1;
       $krbdefdom=~tr/a-z/A-Z/;
   
       my $today=time;
       my $halfyear=$today+15552000;
   
       my $defdom=$r->dir_config('lonDefDomain');
   
       &phase_two_header($r,$datatoken,$distotal,$krbdefdom);
   
       my %sone; my %stwo; my %sthree;
       my $i=0;
   
       if ($total>=0) {
    %sone=&record_sep($records[0]);
    if ($total>=1) {
       %stwo=&record_sep($records[1]);
    }
    if ($total>=2) {
       %sthree=&record_sep($records[2]);
    }
    foreach (sort keys %sone) {
       $r->print('<tr><td><select name=f'.$i.
         ' onChange="flip(this.form,'.$i.');">');
       foreach ('none: ','username:Username',
        'names:Last Name, First Names',
        'fname:First Name','mname:Middle Names/Initials',
        'lname:Last Name','gen:Generation',
        'id:ID/Student Number','sec:Group/Section',
        'ipwd:Initial Password') {
    my ($value,$display)=split(/\:/,$_);
    $r->print('<option value='.$value.'>'.$display.
     '</option>');
       }
       $r->print('</select></td><td>');
       if (defined($sone{$_})) { 
    $r->print($sone{$_}."</br>\n"); 
       }
       if (defined($stwo{$_})) { 
    $r->print($stwo{$_}."</br>\n"); 
       }
       if (defined($sthree{$_})) { 
    $r->print($sthree{$_}."</br>\n"); 
       }
       $r->print('</td></tr>');
       $i++;
    }
    $i--;
       }
       my $keyfields=join(',',sort keys %sone);
   
       &phase_two_end($r,$i,$keyfields,$defdom,$today,$halfyear);
   }
   
 # ======================================================= Enroll single student  # ======================================================= Enroll single student
   
Line 507  sub enroll_single_student { Line 554  sub enroll_single_student {
                $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'},$ENV{'form.enddate'},
                       $ENV{'form.startdate'}));                        $ENV{'form.startdate'},$ENV{'form.forceid'}));
  } else {   } else {
            $r->print('Invalid login mode or password');                 $r->print('Invalid login mode or password');    
         }                    }          
Line 716  Local Authentication with argument Line 763  Local Authentication with argument
 <a   <a 
  href="javascript:pjump('date_end','Enrollment Ending Date',document.studentform.enddate.value,'end','studentform.pres','dateset');"   href="javascript:pjump('date_end','Enrollment Ending Date',document.studentform.enddate.value,'end','studentform.pres','dateset');"
 >Set Ending Date</a><p>  >Set Ending Date</a><p>
   <h3>ID/Student Number</h3>
   <input type=checkbox name=forceid value=yes> 
   Disable ID/Student Number Safeguard and Force Change of Conflicting IDs
   (only do if you know what you are doing)<p>
 <input type=button onClick="verify(this.form)" value="Enroll as student"><br>  <input type=button onClick="verify(this.form)" value="Enroll as student"><br>
 <input type=hidden name=phase value=five>  <input type=hidden name=phase value=five>
 ENDSENROLL  ENDSENROLL
Line 733  sub menu_phase_two_drop { Line 784  sub menu_phase_two_drop {
                  my %currentlist=();                   my %currentlist=();
                  my $now=time;                   my $now=time;
                  unless ($classlst=~/^error\:/) {                   unless ($classlst=~/^error\:/) {
                      map {                       foreach (split(/\&/,$classlst)) {
                         my ($name,$value)=split(/\=/,$_);                          my ($name,$value)=split(/\=/,$_);
                         my ($end,$start)=split(/\:/,                          my ($end,$start)=split(/\:/,
                                             &Apache::lonnet::unescape($value));                                              &Apache::lonnet::unescape($value));
Line 742  sub menu_phase_two_drop { Line 793  sub menu_phase_two_drop {
                         if ($active) {                          if ($active) {
            $currentlist{&Apache::lonnet::unescape($name)}=1;             $currentlist{&Apache::lonnet::unescape($name)}=1;
                         }                          }
                      } split(/\&/,$classlst);                       }
 # ----------------------------------------------------------- Print out choices  # ----------------------------------------------------------- Print out choices
                      &show_drop_list($r,%currentlist);                       &show_drop_list($r,%currentlist);
          } else {           } else {
Line 760  sub show_drop_list { Line 811  sub show_drop_list {
   
     $r->print('<input type=hidden name=phase value=four>');      $r->print('<input type=hidden name=phase value=four>');
                      $r->print('<table border=2>');                       $r->print('<table border=2>');
                      map {                       foreach (sort keys %currentlist) {
                          my ($sname,$sdom)=split(/\:/,$_);                           my ($sname,$sdom)=split(/\:/,$_);
                          my %reply=&Apache::lonnet::idrget($sdom,$sname);                           my %reply=&Apache::lonnet::idrget($sdom,$sname);
                          my $ssec=&Apache::lonnet::usection($sdom,$sname,$cid);                           my $ssec=&Apache::lonnet::usection($sdom,$sname,$cid);
Line 778  sub show_drop_list { Line 829  sub show_drop_list {
                                    &Apache::lonnet::unescape($reply[1]).                                     &Apache::lonnet::unescape($reply[1]).
                                    '</td><td>'.                                     '</td><td>'.
                                    $ssec."</td></tr>\n");                                     $ssec."</td></tr>\n");
                      } sort keys %currentlist;                       }
                      $r->print('</table><br>');                       $r->print('</table><br>');
                      $r->print('<input type=submit value="Drop Students">');                       $r->print('<input type=submit value="Drop Students">');
 }  }
Line 826  sub upfile_drop_add { Line 877  sub upfile_drop_add {
               my %student=();                my %student=();
 # ----------------------------------------------------------- Get new classlist  # ----------------------------------------------------------- Get new classlist
 # --------------------------------------------------------- Enroll new students  # --------------------------------------------------------- Enroll new students
       map {        foreach (@studentdata) {
   my %entries=&record_sep($_);    my %entries=&record_sep($_);
   
                 unless (($entries{$fields{'username'}} eq '') ||                  unless (($entries{$fields{'username'}} eq '') ||
Line 882  sub upfile_drop_add { Line 933  sub upfile_drop_add {
  &dropstudent($domain,$username,$cid,$sec);   &dropstudent($domain,$username,$cid,$sec);
                          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,$startdate);     $fname,$mname,$lname,$gen,$sec,$enddate,$startdate,
                              $ENV{'form.forceid'});
                          unless ($reply eq 'ok') {                           unless ($reply eq 'ok') {
                             $r->print(                              $r->print(
                              "<p><b>Error enrolling $username: $reply</b><p>");                               "<p><b>Error enrolling $username: $reply</b><p>");
Line 901  sub upfile_drop_add { Line 953  sub upfile_drop_add {
                      }                       }
                   }                    }
                  }                                    }                 
               } @studentdata;                }
               $r->print('<p>Processed Students: '.$count);                $r->print('<p>Processed Students: '.$count);
 # --------------------------------------------------------------- Drop students  # --------------------------------------------------------------- Drop students
               if ($ENV{'form.fullup'} eq 'yes') {                if ($ENV{'form.fullup'} eq 'yes') {
Line 914  sub upfile_drop_add { Line 966  sub upfile_drop_add {
                  my %currentlist=();                   my %currentlist=();
                  my $now=time;                   my $now=time;
                  unless ($classlst=~/^error\:/) {                   unless ($classlst=~/^error\:/) {
                      map {                       foreach (split(/\&/,$classlst)) {
                         my ($name,$value)=split(/\=/,$_);                          my ($name,$value)=split(/\=/,$_);
                         my ($end,$start)=split(/\:/,                          my ($end,$start)=split(/\:/,
                                             &Apache::lonnet::unescape($value));                                              &Apache::lonnet::unescape($value));
Line 923  sub upfile_drop_add { Line 975  sub upfile_drop_add {
                         if ($active) {                          if ($active) {
            $currentlist{&Apache::lonnet::unescape($name)}=1;             $currentlist{&Apache::lonnet::unescape($name)}=1;
                         }                          }
                      } split(/\&/,$classlst);                       }
 # ------------------------------------------------ Now got up-to-date classlist  # ------------------------------------------------ Now got up-to-date classlist
                      map {                       foreach (@studentdata) {
                  my %entries=&record_sep($_);                   my %entries=&record_sep($_);
                         unless (($entries{$fields{'username'}} eq '') ||                          unless (($entries{$fields{'username'}} eq '') ||
                           (!defined($entries{$fields{'username'}}))) {                            (!defined($entries{$fields{'username'}}))) {
Line 933  sub upfile_drop_add { Line 985  sub upfile_drop_add {
                             $entries{$fields{'username'}}.':'.                              $entries{$fields{'username'}}.':'.
                             $domain});                              $domain});
         }          }
                      } @studentdata;                       }
 # ----------------------------------------------------------- Print out choices  # ----------------------------------------------------------- Print out choices
                      &show_drop_list($r,%currentlist);                       &show_drop_list($r,%currentlist);
          } else {           } else {
Line 952  sub upfile_drop_add { Line 1004  sub upfile_drop_add {
 sub drop_student_list {  sub drop_student_list {
     my $r=shift;      my $r=shift;
     my $count=0;      my $count=0;
     map {      foreach (keys %ENV) {
  if ($_=~/^form\.drop\:/) {   if ($_=~/^form\.drop\:/) {
     my ($dummy,$uname,$udom)=split(/\:/,$_);      my ($dummy,$uname,$udom)=split(/\:/,$_);
             &dropstudent($udom,$uname,$ENV{'request.course.id'});              &dropstudent($udom,$uname,$ENV{'request.course.id'});
             $r->print('Dropped '.$uname.' at '.$udom.'<br>');              $r->print('Dropped '.$uname.' at '.$udom.'<br>');
             $count++;              $count++;
         }          }
     } keys %ENV;      }
     $r->print('<p><b>Dropped '.$count.' student(s).</b>');      $r->print('<p><b>Dropped '.$count.' student(s).</b>');
     $r->print('<p>Re-enrollment will re-activate data.');      $r->print('<p>Re-enrollment will re-activate data.');
 }  }

Removed from v.1.15  
changed lines
  Added in v.1.23


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