Diff for /loncom/interface/Attic/londropadd.pm between versions 1.34 and 1.46

version 1.34, 2002/04/30 13:51:00 version 1.46, 2002/08/21 17:18:08
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 84  sub modifystudent { Line 82  sub modifystudent {
     my %roles = &Apache::lonnet::dump('roles',$udom,$unam);      my %roles = &Apache::lonnet::dump('roles',$udom,$unam);
     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 if ($tmp =~ /^(con_lost|error|no_such_host)/i);      return "$1" 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 $result = '';
     foreach my $course (keys(%roles)) {      foreach my $course (keys(%roles)) {
         my $value = $roles{$course};          if ($course=~/^$courseid(?:\/)*(?:\s+)*(\w+)*\_st$/) {
         if ($course=~/^$courseid(?:\/)*(\w+)*\_st$/) {  
             # 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) && (!$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 (!($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,'','','','','','','',                          ($udom,$unam,'','','','','','','',
                          $section,time,undef,undef,$desiredhost);                           $section,time,undef,undef,$desiredhost);
                       $result .= $reply.':';
                 }                  }
             }              }
         }          }
     }      }
       if ($result eq '') {
           $result eq 'Unable to find section for this student';
       } else {
           $result =~ s/(ok:)+/ok/g;
       }
       return $result;
 }  }
   
 # ============ build a domain and server selection form  # ============ build a domain and server selection form
Line 122  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 138  sub domain_form { Line 143  sub domain_form {
 sub menu_phase_one {  sub menu_phase_one {
     my $r=shift;      my $r=shift;
     my $upfile_select=&Apache::loncommon::upfile_select_html();      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);      $r->print(<<ENDUPFORM);
 <input type=hidden name=phase value=two>  <input type=hidden name=phase value=two>
 <hr>  <hr>
 <h3>Upload a courselist</h3>  <h3>Upload a courselist</h3>
 $upfile_select  $upfile_select
 <p><input type=submit name=fileupload value="Upload Courselist">  <p><input type=submit name="fileupload" value="Upload Courselist">
 <hr>  <br />
   $create_classlist_help <br />
   $create_csv_help
   
   <hr />
 <h3>Enroll a single student</h3>  <h3>Enroll a single student</h3>
 <p><input type=submit name=enroll value="Enroll Student">  <p><input type=submit name="enroll" value="Enroll Student"></p>
 <hr>  <hr />
   <h3>Classlist</h3>
   <p><input type=submit name="view" value="View Class List">
   <input type=submit name="viewcsv" value="Comma Separated Class List"></p>
   <hr />
 <h3>Drop students</h3>  <h3>Drop students</h3>
 <p><input type=submit name=drop value="Selection List">  <p><input type=submit name="drop" value="Selection List"></p>
 ENDUPFORM  ENDUPFORM
 }  }
   
Line 163  sub phase_two_header { Line 182  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 450  LON-CAPA domain: $domform <p> Line 471  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 513  sub enroll_single_student { Line 534  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 562  sub enroll_single_student { Line 583  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 679  sub get_current_classlist { Line 701  sub get_current_classlist {
         }          }
         return (undef,%currentlist);          return (undef,%currentlist);
     } else {      } else {
           $tmp =~ s/^error://;
         return ($tmp,undef);          return ($tmp,undef);
     }      }
 }  }
Line 686  sub get_current_classlist { Line 709  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 700  sub menu_phase_two_drop { Line 727  sub menu_phase_two_drop {
     }      }
 }  }
   
   # ============================================== view classlist
   sub menu_phase_two_view {
       my $r=shift;
       $r->print("<h3>Current Classlist</h3>");
       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 789  sub upfile_drop_add { Line 917  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 939  sub upfile_drop_add { Line 1067  sub upfile_drop_add {
 sub drop_student_list {  sub drop_student_list {
     my $r=shift;      my $r=shift;
     my $count=0;      my $count=0;
     foreach (@{$ENV{'form.droplist'}}) {      my @droplist;
       if (ref($ENV{'form.droplist'})) {
           @droplist = @{$ENV{'form.droplist'}};
       } else {
           @droplist = ($ENV{'form.droplist'});
       }
       foreach (@droplist) {
         my ($uname,$udom)=split(/\:/,$_);          my ($uname,$udom)=split(/\:/,$_);
         &modifystudent($udom,$uname,$ENV{'request.course.id'});          my $result = &modifystudent($udom,$uname,$ENV{'request.course.id'});
         $r->print('Dropped '.$uname.' at '.$udom.'<br>');          if ($result eq 'ok' || $result eq 'ok:') {
               $r->print('Dropped '.$uname.' at '.$udom.'<br>');
           } else {
               $r->print('Error dropping '.$uname.' at '.$udom.': '.$result.
                         '<br />');
           }
         $count++;          $count++;
     }      }
     $r->print('<p><b>Dropped '.$count.' student(s).</b>');      $r->print('<p><b>Dropped '.$count.' student(s).</b>');
Line 961  sub handler { Line 1100  sub handler {
     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 984  sub handler { Line 1123  sub handler {
                 &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 1001  sub handler { Line 1144  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.34  
changed lines
  Added in v.1.46


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