Diff for /loncom/interface/Attic/londropadd.pm between versions 1.35 and 1.49

version 1.35, 2002/04/30 15:24:16 version 1.49, 2002/09/13 15:33:39
Line 59  use Apache::Constants qw(:common :http R Line 59  use Apache::Constants qw(:common :http R
 # ================================================================ Print header  # ================================================================ Print header
   
 sub header {  sub header {
       my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager');
     return(<<ENDHEAD);      return(<<ENDHEAD);
 <html>  <html>
 <head>  <head>
 <title>LON-CAPA Student Drop/Add</title>  <title>LON-CAPA Enrollment Manager</title>
 </head>  </head>
 <body bgcolor="#FFFFFF">  $bodytag
 <img align=right src=/adm/lonIcons/lonlogos.gif>  <form method="post" enctype="multipart/form-data"  
 <h1>Drop/Add Students</h1>        action="/adm/dropadd" name="studentform">
 <form method="post" enctype="multipart/form-data"  
 action="/adm/dropadd" name="studentform">  
 <h2>Course: $ENV{'course.'.$ENV{'request.course.id'}.'.description'}</h2>  
 ENDHEAD  ENDHEAD
 }  }
   
Line 106  sub modifystudent { Line 104  sub modifystudent {
     }      }
     if ($result eq '') {      if ($result eq '') {
         $result eq 'Unable to find section for this student';          $result eq 'Unable to find section for this student';
     } elsif ($result =~ /^(ok:)+$/) {      } else {
         $result eq 'ok';          $result =~ s/(ok:)+/ok/g;
     }      }
     return $result;      return $result;
 }  }
Line 129  sub domain_form { Line 127  sub domain_form {
         $select_menus{$dom}->{'default'}= 'default';          $select_menus{$dom}->{'default'}= 'default';
         $select_menus{$dom}->{'select2'}->{'default'} = 'default';          $select_menus{$dom}->{'select2'}->{'default'} = 'default';
         # Now build up the other items in the second menu          # Now build up the other items in the second menu
         my %servers = &Apache::loncommon::get_home_servers($dom);          my %servers = &Apache::loncommon::get_library_servers($dom);
         foreach my $server (keys(%servers)) {          foreach my $server (keys(%servers)) {
             $select_menus{$dom}->{'select2'}->{$server}               $select_menus{$dom}->{'select2'}->{$server} 
                                             = "$server $servers{$server}";                                              = "$server $servers{$server}";
Line 144  sub domain_form { Line 142  sub domain_form {
 # ============================================================== Menu Phase One  # ============================================================== Menu Phase One
 sub menu_phase_one {  sub menu_phase_one {
     my $r=shift;      my $r=shift;
     my $upfile_select=&Apache::loncommon::upfile_select_html();      $r->print(<<END);
     $r->print(<<ENDUPFORM);  <p>
 <input type=hidden name=phase value=two>  <font size="+1"><a href="/adm/dropadd?phase=two&uplist=yes">Upload a course list</a></font>
 <hr>  </p><p>
 <h3>Upload a courselist</h3>  <font size="+1"><a href="/adm/dropadd?phase=two&enroll=yes">Enroll a single student</a></font>
 $upfile_select  </p><p>
 <p><input type=submit name=fileupload value="Upload Courselist">  <font size="+1"><a href="/adm/dropadd?phase=two&view=yes">View Classlist</a></font>
 <hr>  </p><p>
 <h3>Enroll a single student</h3>  <font size="+1"><a href="/adm/dropadd?phase=two&drop=yes">Drop Students</a></font>
 <p><input type=submit name=enroll value="Enroll Student">  </p>
 <hr>  END
 <h3>Drop students</h3>  
 <p><input type=submit name=drop value="Selection List">  
 ENDUPFORM  
 }  }
   
 sub phase_two_header {  sub phase_two_header {
Line 170  sub phase_two_header { Line 165  sub phase_two_header {
     }      }
     my $javascript_validations=&javascript_validations($krbdefdom);      my $javascript_validations=&javascript_validations($krbdefdom);
     $r->print(<<ENDPICK);      $r->print(<<ENDPICK);
   <h3>Uploading Class List</h3>
 <hr>  <hr>
 <h3>Identify fields</h3>  <h3>Identify fields</h3>
 Total number of records found in file: $distotal <hr />  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  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 />  to this page if the data selected is insufficient to run your class.<hr />
 <input type="submit" name="associate"  value="Reverse Association" />  <input type="button" value="Reverse Association" onClick="javascript:this.form.associate.value='Reverse Association';submit(this.form);" />
   <input type="hidden" name="associate"  value="" />
 <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="fileupload" value="$ENV{'form.fileupload'}" />  <input type="hidden" name="fileupload" value="$ENV{'form.fileupload'}" />
Line 311  function verify(vf) { Line 308  function verify(vf) {
     verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec);      verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec);
 }  }
   
   //
   // vf = this.form
   // tf = column number
   //
   // values of nw
   //
   // 0 = none
   // 1 = username
   // 2 = names (lastname, firstnames)
   // 3 = fname (firstname)
   // 4 = mname (middlename)
   // 5 = lname (lastname)
   // 6 = gen   (generation)
   // 7 = id
   // 8 = section
   // 9 = ipwd  (password)
   //
 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;
      // make sure no other columns are labeled the same as this one
    for (i=0;i<=vf.nfields.value;i++) {     for (i=0;i<=vf.nfields.value;i++) {
       if ((i!=tf) && (eval('vf.f'+i+'.selectedIndex')==nw)) {        if ((i!=tf) && (eval('vf.f'+i+'.selectedIndex')==nw)) {
           eval('vf.f'+i+'.selectedIndex=0;')            eval('vf.f'+i+'.selectedIndex=0;')
       }        }
    }     }
    if (tf==1 && nw!=0) {     // If we set this to 'lastname, firstnames', clear out all the ones
       for (i=2;i<=5;i++) {     // set to 'fname','mname','lname','gen' (3,4,5,6) currently.
          eval('vf.f'+i+'.selectedIndex=0;')  
       }  
    }  
    if (nw==2) {     if (nw==2) {
       for (i=0;i<=vf.nfields.value;i++) {        for (i=0;i<=vf.nfields.value;i++) {
          if ((eval('vf.f'+i+'.selectedIndex')>=3) &&           if ((eval('vf.f'+i+'.selectedIndex')>=3) &&
Line 332  function flip(vf,tf) { Line 344  function flip(vf,tf) {
          }           }
       }        }
    }     }
      // If we set this to one of 'fname','mname','lname','gen' (3,4,5,6),
      // clear out any that are set to 'lastname, firstnames' (2)
    if ((nw>=3) && (nw<=6)) {     if ((nw>=3) && (nw<=6)) {
       for (i=0;i<=vf.nfields.value;i++) {        for (i=0;i<=vf.nfields.value;i++) {
          if (eval('vf.f'+i+'.selectedIndex')==2) {           if (eval('vf.f'+i+'.selectedIndex')==2) {
Line 339  function flip(vf,tf) { Line 353  function flip(vf,tf) {
          }           }
       }        }
    }     }
      // If we set the password, make the password form below correspond to 
      // the new value.
    if (nw==9) {     if (nw==9) {
        changed_radio('int',document.studentform);         changed_radio('int',document.studentform);
        set_auth_radio_buttons('int',document.studentform);         set_auth_radio_buttons('int',document.studentform);
Line 457  LON-CAPA domain: $domform <p> Line 473  LON-CAPA domain: $domform <p>
 <input type=checkbox name=forceid value=yes>   <input type=checkbox name=forceid value=yes> 
 Disable ID/Student Number Safeguard and Force Change of Conflicting IDs  Disable ID/Student Number Safeguard and Force Change of Conflicting IDs
 (only do if you know what you are doing)<p>  (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="javascript: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
 }  }
Line 520  sub enroll_single_student { Line 536  sub enroll_single_student {
         if (lc($desiredhost) eq 'default') {          if (lc($desiredhost) eq 'default') {
             $desiredhost = undef;              $desiredhost = undef;
         } else {          } else {
             my %home_servers = &Apache::loncommon::get_home_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">Error:</font>'.
                           'Invalid home server specified');                            'Invalid home server specified');
Line 532  sub enroll_single_student { Line 548  sub enroll_single_student {
  my $amode='';   my $amode='';
         my $genpwd='';          my $genpwd='';
         if ($ENV{'form.login'} eq 'krb') {          if ($ENV{'form.login'} eq 'krb') {
            $amode='krb4';             $amode='krb';
      $amode.=$ENV{'form.krbver'};
            $genpwd=$ENV{'form.krbarg'};             $genpwd=$ENV{'form.krbarg'};
         } elsif ($ENV{'form.login'} eq 'int') {          } elsif ($ENV{'form.login'} eq 'int') {
            $amode='internal';             $amode='internal';
Line 569  sub enroll_single_student { Line 586  sub enroll_single_student {
 # ======================================================= Menu Phase Two Enroll  # ======================================================= Menu Phase Two Enroll
 sub menu_phase_two_enroll {  sub menu_phase_two_enroll {
     my $r=shift;      my $r=shift;
       $r->print("<h3>Enroll One Student</h3>");
     my ($krbdefdom) = $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/;      my ($krbdefdom) = $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/;
     $krbdefdom=~tr/a-z/A-Z/;      $krbdefdom=~tr/a-z/A-Z/;
     my $today    = time;      my $today    = time;
Line 686  sub get_current_classlist { Line 704  sub get_current_classlist {
         }          }
         return (undef,%currentlist);          return (undef,%currentlist);
     } else {      } else {
           $tmp =~ s/^error://;
         return ($tmp,undef);          return ($tmp,undef);
     }      }
 }  }
Line 693  sub get_current_classlist { Line 712  sub get_current_classlist {
 # ========================================================= Menu Phase Two Drop  # ========================================================= Menu Phase Two Drop
 sub menu_phase_two_drop {  sub menu_phase_two_drop {
     my $r=shift;      my $r=shift;
       $r->print("<h3>Drop Students</h3>");
     my $cid=$ENV{'request.course.id'};      my $cid=$ENV{'request.course.id'};
     my ($error,%currentlist)=&get_current_classlist($ENV{'course.'.$cid.'.domain'},      my ($error,%currentlist)=&get_current_classlist
                                            $ENV{'course.'.$cid.'.num'});          ($ENV{'course.'.$cid.'.domain'},$ENV{'course.'.$cid.'.num'});
     if (defined($error)) {      if (defined($error)) {
         $r->print('<pre>ERROR:$error</pre>');          if ($error =~ /^No such file or directory/) {
     }              $r->print("There are no students currently enrolled.\n");
     if (!defined(%currentlist)) {           } else {
               $r->print("<pre>ERROR:$error</pre>");
           }
       } elsif (!defined(%currentlist)) { 
         $r->print("There are no students currently enrolled.\n");          $r->print("There are no students currently enrolled.\n");
     } else {      } else {
         # Print out the available choices          # Print out the available choices
Line 707  sub menu_phase_two_drop { Line 730  sub menu_phase_two_drop {
     }      }
 }  }
   
   # ============================================== view classlist
   sub menu_phase_two_view {
       my $r=shift;
       $r->print(<<END);
   <font size="+1">Current Classlist</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
   <font size="+1"><a href="/adm/dropadd?phase=two&viewcsv=yes">CSV format</a></font><br />
   END
       my $cid=$ENV{'request.course.id'};
       my ($error,%currentlist)=&get_current_classlist
           ($ENV{'course.'.$cid.'.domain'},$ENV{'course.'.$cid.'.num'});
       if (defined($error)) {
           if ($error =~ /^No such file or directory/) {
               $r->print("There are no students currently enrolled.\n");
           } else {
               $r->print("<pre>ERROR:$error</pre>");
           }
       } elsif (!defined(%currentlist)) { 
           $r->print("There are no students currently enrolled.\n");
       } else {
           # Print out the available choices
           &show_class_list($r,'view',%currentlist);
       }
   }
   
   # ============================================== view classlist
   sub menu_phase_two_viewcsv {
       my $r=shift;
       my $cid=$ENV{'request.course.id'};
       my ($error,%currentlist)=&get_current_classlist
           ($ENV{'course.'.$cid.'.domain'},$ENV{'course.'.$cid.'.num'});
       if (defined($error)) {
           if ($error =~ /^No such file or directory/) {
               $r->print("There are no students currently enrolled.\n");
           } else {
               $r->print("<pre>ERROR:$error</pre>");
           }
       } elsif (!defined(%currentlist)) { 
           $r->print("There are no students currently enrolled.\n");
       } else {
           &show_class_list($r,'csv',%currentlist);
       }
   }
   
   # =================================================== Show student list to drop
   sub show_class_list {
       my ($r,$mode,%currentlist)=@_;
       my $cid=$ENV{'request.course.id'};
       # Print out header 
       if ($mode eq 'view') {
           $r->print(<<END);
   <p>
   <table border=2>
   <tr><th>username</th><th>domain</th><th>ID</th>
       <th>student name</th><th>generation</th><th>section</th></tr>
   END
       } elsif ($mode eq 'csv') {
           $r->print(<<END);
   username,domain,ID,last name,first name,middle name,generation,section
   END
       }
       foreach (sort keys %currentlist) {
           my ($sname,$sdom)=split(/\:/,$_);
           my %reply=&Apache::lonnet::idrget($sdom,$sname);
           my $ssec=&Apache::lonnet::usection($sdom,$sname,$cid);
           my %info=&Apache::lonnet::get('environment',
                                         ['firstname','middlename',
                                          'lastname','generation'],
                                         $sdom, $sname);
           my ($tmp) = keys(%info);
           if ($tmp =~ /^(con_lost|error|no_such_host)/i) {
               $r->print( ($mode eq 'view' ? 
                          '<tr><td colspan="6"><font color="red">' :'').
                          'Internal error: unable to get environment '.
                          'for '.$sname.' in domain '.$sdom.
                          ( $mode eq 'view' ?'</font></td></tr>' :''));
           } else {
               if ($mode eq 'view') {
                   $r->print(<<"END");
   <tr>
       <td>$sname</td>
       <td>$sdom</td>
       <td>$reply{$sname}</td>
       <td>$info{'lastname'}, $info{'firstname'} $info{'middlename'}</td>
       <td>$info{'generation'}</td>
       <td>$ssec</td>
   </tr>
   END
               } elsif ($mode eq 'csv') {
                   my @line = ();
                   foreach ($sname,$sdom,$reply{$sname},
                            $info{'lastname'},$info{'firstname'},
                            $info{'middlename'},$info{'generation'},$ssec) {
                       push @line,&Apache::loncommon::csv_translate($_);
                   }
                   my $tmp = $";
                   $" = '","';
                   $r->print("\"@line\"\n");
                   $" = $tmp;
               }
           }
       }
       $r->print('</table><br>') if ($mode eq 'view');
   }
   
 # =================================================== Show student list to drop  # =================================================== Show student list to drop
 sub show_drop_list {  sub show_drop_list {
     my ($r,%currentlist)=@_;      my ($r,%currentlist)=@_;
Line 768  END Line 895  END
 END  END
 }  }
   
   #
   # Print out the initial form to get the courselist file
   #
   sub print_first_courselist_upload_form {
       my $r=shift;
       my $upfile_select=&Apache::loncommon::upfile_select_html();
       my $create_classlist_help = 
    &Apache::loncommon::help_open_topic("Course_Create_Class_List",
              "How do I create a class list from a spreadsheet");
       my $create_csv_help =
    &Apache::loncommon::help_open_topic("Course_Convert_To_CSV",
              "How do I create a CSV file from a spreadsheet");
       $r->print(<<ENDUPFORM);
   <input type=hidden name=phase value=two>
   <hr>
   <h3>Upload a courselist</h3>
   $upfile_select
   <p><input type=submit name="fileupload" value="Upload Courselist">
   <br />
   $create_classlist_help <br />
   $create_csv_help
   </body></html>
   ENDUPFORM
       return;
   }
   
 # ================================================= Drop/Add from uploaded file  # ================================================= Drop/Add from uploaded file
 sub upfile_drop_add {  sub upfile_drop_add {
     my $r=shift;      my $r=shift;
Line 796  sub upfile_drop_add { Line 949  sub upfile_drop_add {
     if (lc($desiredhost) eq 'default') {      if (lc($desiredhost) eq 'default') {
         $desiredhost = undef;          $desiredhost = undef;
     } else {      } else {
         my %home_servers = &Apache::loncommon::get_home_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">Error:</font>'.
                       'Invalid home server specified');                        'Invalid home server specified');
Line 807  sub upfile_drop_add { Line 960  sub upfile_drop_add {
     my $amode  = '';      my $amode  = '';
     my $genpwd = '';      my $genpwd = '';
     if ($ENV{'form.login'} eq 'krb') {      if ($ENV{'form.login'} eq 'krb') {
         $amode='krb4';          $amode='krb';
    $amode.=$ENV{'form.krbver'};
         $genpwd=$ENV{'form.krbarg'};          $genpwd=$ENV{'form.krbarg'};
     } elsif ($ENV{'form.login'} eq 'int') {      } elsif ($ENV{'form.login'} eq 'int') {
         $amode='internal';          $amode='internal';
Line 955  sub drop_student_list { Line 1109  sub drop_student_list {
     foreach (@droplist) {      foreach (@droplist) {
         my ($uname,$udom)=split(/\:/,$_);          my ($uname,$udom)=split(/\:/,$_);
         my $result = &modifystudent($udom,$uname,$ENV{'request.course.id'});          my $result = &modifystudent($udom,$uname,$ENV{'request.course.id'});
         if ($result eq 'ok') {          if ($result eq 'ok' || $result eq 'ok:') {
             $r->print('Dropped '.$uname.' at '.$udom.'<br>');              $r->print('Dropped '.$uname.' at '.$udom.'<br>');
         } else {          } else {
             $r->print('Error dropping '.$uname.' at '.$udom.': '.$result.              $r->print('Error dropping '.$uname.' at '.$udom.': '.$result.
Line 975  sub handler { Line 1129  sub handler {
         $r->send_http_header;          $r->send_http_header;
         return OK;          return OK;
     }      }
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                               ['enroll','drop','view','phase',
                                                'viewcsv','uplist']);
     #  Needs to be in a course      #  Needs to be in a course
     if (($ENV{'request.course.fn'}) &&       if (($ENV{'request.course.fn'}) && 
         (&Apache::lonnet::allowed('cst',$ENV{'request.course.id'}))) {          (&Apache::lonnet::allowed('cst',$ENV{'request.course.id'}))) {
         # Start page          # Start page
         $r->content_type('text/html');          $r->content_type('text/html') if (! exists($ENV{'form.viewcsv'}));
         $r->send_http_header;          $r->send_http_header;
         $r->print(&header());          $r->print(&header()) if (! exists($ENV{'form.viewcsv'}));
         # Phase one, initial screen          # Phase one, initial screen
         unless ($ENV{'form.phase'}) {          unless ($ENV{'form.phase'}) {
             &menu_phase_one($r);              &menu_phase_one($r);
Line 996  sub handler { Line 1153  sub handler {
             }              }
         }          }
         if ($ENV{'form.phase'} eq 'two') {          if ($ENV{'form.phase'} eq 'two') {
             if ($ENV{'form.fileupload'}) {              if ($ENV{'form.uplist'}) {
                   &print_first_courselist_upload_form($r);
               } elsif ($ENV{'form.fileupload'}) {
                 &menu_phase_two_upload($r);                  &menu_phase_two_upload($r);
             } elsif ($ENV{'form.enroll'}) {              } elsif ($ENV{'form.enroll'}) {
                 &menu_phase_two_enroll($r);                  &menu_phase_two_enroll($r);
             } elsif ($ENV{'form.drop'}) {              } elsif ($ENV{'form.drop'}) {
                 &menu_phase_two_drop($r);                  &menu_phase_two_drop($r);
               } elsif ($ENV{'form.view'}) {
                   &menu_phase_two_view($r);
               } elsif ($ENV{'form.viewcsv'}) {
                   &menu_phase_two_viewcsv($r);
             }              }
         }          }
         # Phase three          # Phase three
Line 1019  sub handler { Line 1182  sub handler {
             &enroll_single_student($r);              &enroll_single_student($r);
         }          }
          # End           # End
         $r->print('</form></body></html>');          $r->print('</form></body></html>') if (! exists($ENV{'form.viewcsv'}));
     } else {      } else {
         # Not in a course, or not allowed to modify parms          # Not in a course, or not allowed to modify parms
         $ENV{'user.error.msg'}=          $ENV{'user.error.msg'}=

Removed from v.1.35  
changed lines
  Added in v.1.49


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