Diff for /loncom/interface/Attic/londropadd.pm between versions 1.52 and 1.57

version 1.52, 2002/09/24 18:24:43 version 1.57, 2002/10/16 13:00:57
Line 558  sub print_upload_manager_form { Line 558  sub print_upload_manager_form {
 sub enroll_single_student {  sub enroll_single_student {
     my $r=shift;      my $r=shift;
     $r->print('<h3>Enrolling Student</h3>');      $r->print('<h3>Enrolling Student</h3>');
     $r->print('<p>Enrolling '.$ENV{'form.cuname'}." in domain ".      $r->print('<p>Enrolling '.$ENV{'form.cuname'}." \@ ".
               $ENV{'form.lcdomain'}.'</p>');                $ENV{'form.lcdomain'}.'</p>');
     if (($ENV{'form.cuname'})&&($ENV{'form.cuname'}!~/\W/)&&      if (($ENV{'form.cuname'})&&($ENV{'form.cuname'}!~/\W/)&&
         ($ENV{'form.lcdomain'})&&($ENV{'form.lcdomain'}!~/\W/)) {          ($ENV{'form.lcdomain'})&&($ENV{'form.lcdomain'}!~/\W/)) {
Line 594  sub enroll_single_student { Line 594  sub enroll_single_student {
         my $home = &Apache::lonnet::homeserver($ENV{'form.cuname'},          my $home = &Apache::lonnet::homeserver($ENV{'form.cuname'},
                                                    $ENV{'form.lcdomain'});                                                     $ENV{'form.lcdomain'});
         if ((($amode) && ($genpwd)) || ($home ne 'no_host')) {          if ((($amode) && ($genpwd)) || ($home ne 'no_host')) {
               # Clean out any old roles the student has in this class.
             &modifystudent($ENV{'form.lcdomain'},$ENV{'form.cuname'},              &modifystudent($ENV{'form.lcdomain'},$ENV{'form.cuname'},
                            $ENV{'request.course.id'},$ENV{'form.csec'},                             $ENV{'request.course.id'},$ENV{'form.csec'},
                             $desiredhost);                              $desiredhost);
           $r->print(&Apache::lonnet::modifystudent(              my $login_result = &Apache::lonnet::modifystudent
                       $ENV{'form.lcdomain'},$ENV{'form.cuname'},                  ($ENV{'form.lcdomain'},$ENV{'form.cuname'},
                       $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'},$ENV{'form.enddate'},
                       $ENV{'form.startdate'},$ENV{'form.forceid'},                   $ENV{'form.startdate'},$ENV{'form.forceid'},
                     $desiredhost));                   $desiredhost);
               if ($login_result =~ /^ok/) {
                   $r->print($login_result);
                   $r->print("<p> If active, the new role will be available ".
                             "when the student next logs in to LON-CAPA.</p>");
               } else {
                   $r->print("unable to enroll: ".$login_result);
               }
  } else {   } else {
             $r->print('<p><font color="#ff0000">ERROR</font>&nbsp;'.              $r->print('<p><font color="#ff0000">ERROR</font>&nbsp;'.
                       'Invalid login mode or password.  '.                        'Invalid login mode or password.  '.
Line 726  END Line 734  END
     return;      return;
 }  }
   
 # =================================================== get the current classlist  
 sub get_current_classlist {  
     my $r = shift;  
     # Call DownloadClasslist  
     my $cid = $ENV{'request.course.id'};  
     my $c = $r->connection;  
     my $classlisthash = &Apache::loncoursedata::DownloadClasslist  
         ($cid,'Not downloaded',$c);  
     # Call ProcessClasslist  
     my %cache;  
     my @students = &Apache::loncoursedata::ProcessClasslist(\%cache,  
                                                             $classlisthash,  
                                                             $cid,$c);  
     return (\@students,\%cache);  
 }  
   
 # ========================================================= Menu Phase Two Drop  # ========================================================= Menu Phase Two Drop
 sub print_drop_menu {  sub print_drop_menu {
     my $r=shift;      my $r=shift;
     $r->print("<h3>Drop Students</h3>");      $r->print("<h3>Drop Students</h3>");
     my $cid=$ENV{'request.course.id'};      my $cid=$ENV{'request.course.id'};
     my ($student_array,$student_data)=&get_current_classlist($r);      my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist();
     if (! scalar(@$student_array)) {      if (! defined($classlist)) {
         $r->print("There are no students currently enrolled.\n");          $r->print("There are no students currently enrolled.\n");
         return;          return;
     }      }
     # Print out the available choices      # Print out the available choices
     &show_drop_list($student_array,$student_data,$r);      &show_drop_list($r,$classlist,$keylist);
     return;      return;
 }  }
   
 # ============================================== view classlist  # ============================================== view classlist
 sub print_html_classlist {  sub print_html_classlist {
     my $r=shift;      my $r=shift;
       if (! exists($ENV{'form.sortby'})) {
           $ENV{'form.sortby'} = 'username';
       }
       if (! exists($ENV{'form.Status'}) || 
           $ENV{'form.Status'} !~ /^(Any|Expired|Active)$/) {
           $ENV{'form.Status'} = 'Active';
       }
       my $status_select = &Apache::lonhtmlcommon::StatusOptions
           ($ENV{'form.Status'},'studentform');
     $r->print(<<END);      $r->print(<<END);
   <input type="hidden" name="action" value="classlist" />
   <input type="hidden" name="state"  value="" />
 <p>  <p>
 <font size="+1">Current Classlist</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <font size="+1">Current Classlist</font>
 <font size="+1"><a href="/adm/dropadd?action=classlist&state=csv">CSV format</a></font>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
   <font size="+1">
   <a href="javascript:document.studentform.state.value='csv';document.studentform.submit();">CSV format</a>
   </font>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
   $status_select
 </p>  </p>
 END  END
     my $cid=$ENV{'request.course.id'};      my $cid=$ENV{'request.course.id'};
     my ($student_array,$student_data)=&get_current_classlist($r);      my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();
     if (! scalar(@$student_array)) {      if (! defined($classlist)) {
         $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
         if ($ENV{'form.action'} eq 'modifystudent') {          if ($ENV{'form.action'} eq 'modifystudent') {
             &show_class_list($r,'view','modify','any',$student_array,$student_data);              &show_class_list($r,'view','modify','modifystudent',
                                $ENV{'form.Status'},$classlist,$keylist);
         } else {          } else {
             &show_class_list($r,'view','aboutme','any',$student_array,$student_data);              &show_class_list($r,'view','aboutme','classlist',
                                $ENV{'form.Status'},$classlist,$keylist);
         }          }
     }      }
 }  }
Line 784  END Line 794  END
 sub print_csv_classlist {  sub print_csv_classlist {
     my $r=shift;      my $r=shift;
     my $cid=$ENV{'request.course.id'};      my $cid=$ENV{'request.course.id'};
     my ($student_array,$student_data)=&get_current_classlist($r);      my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();
     if (! scalar(@$student_array)) {      if (! defined($classlist)) {
         $r->print("There are no students currently enrolled.\n");          $r->print("There are no students currently enrolled.\n");
     } else {      } else {
         &show_class_list($r,'csv','nolink','any',$student_array,$student_data);          &show_class_list($r,'csv','nolink','csv',
                            $ENV{'form.Status'},$classlist,$keylist);
     }      }
 }  }
   
 # =================================================== Show student list to drop  # =================================================== Show student list to drop
 sub show_class_list {  sub show_class_list {
     my ($r,$mode,$linkto,$statusmode,$students,$student_data)=@_;      my ($r,$mode,$linkto,$action,$statusmode,$classlist,$keylist)=@_;
     my $cid=$ENV{'request.course.id'};      my $cid=$ENV{'request.course.id'};
   #    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
   #                                            ['sortby']);
       my $sortby = $ENV{'form.sortby'};
       if ($sortby !~ /^(username|domain|section|fullname|id)$/) {
           $sortby = 'username';
       }
     # Print out header       # Print out header 
     if ($mode eq 'view') {      if ($mode eq 'view') {
         if ($linkto eq 'aboutme') {          if ($linkto eq 'aboutme') {
             $r->print('Select a user name to view the users page.');              $r->print('Select a user name to view the users personal page.');
         } elsif ($linkto eq 'modify') {          } elsif ($linkto eq 'modify') {
             $r->print('Select a user name to modify the students information');              $r->print('Select a user name to modify the students information');
         }          }
         $r->print(<<END);          $r->print(<<END);
   <input type="hidden" name="sortby" value="$sortby" />
 <p>  <p>
 <table border=2>  <table border=2>
 <tr><th>username</th><th>domain</th><th>ID</th>  <tr><th>
     <th>student name</th><th>section</th></tr>         <a href="javascript:document.studentform.sortby.value='username';document.studentform.submit();">username</a>
       </th><th>
          <a href="javascript:document.studentform.sortby.value='domain';document.studentform.submit();">domain</a>
       </th><th>
          <a href="javascript:document.studentform.sortby.value='id';document.studentform.submit();">ID</a>
       </th><th>
          <a href="javascript:document.studentform.sortby.value='fullname';document.studentform.submit();">student name</a>
       </th><th>
          <a href="javascript:document.studentform.sortby.value='section';document.studentform.submit();">section</a>
       </th>
   </tr>
 END  END
     } elsif ($mode eq 'csv') {      } elsif ($mode eq 'csv') {
         $r->print('"'.join('","',("username","domain","ID","student name",          $r->print('"'.join('","',("username","domain","ID","student name",
                                   "section")).'"'."\n");                                    "section")).'"'."\n");
     }      }
     foreach my $student (@$students) {      #
         my $error;      # Sort the students
         if (exists($student_data->{$student.':error'})) {      my %index;
             $error = $student_data->{$student.':error'};      my $i;
         }      foreach (@$keylist) {
         if ($error) {          $index{$_} = $i++;
             $r->print('<tr><td colspan="6">'.      }
                       '<font color="#FF8888">Error</font>'.      my $index  = $index{$sortby};
                       'Error retrieving data for '.      my $second = $index{'username'};
                       join('@',split(/:/,$student)).      my $third  = $index{'domain'};
                       ', '.$error.'</td></tr>'."\n");      my @Sorted_Students = sort {
             next;          lc($classlist->{$a}->[$index])  cmp lc($classlist->{$b}->[$index])
         }              ||
         my $username = $student_data->{$student.':username'};          lc($classlist->{$a}->[$second]) cmp lc($classlist->{$b}->[$second])
         my $domain   = $student_data->{$student.':domain'};              ||
         my $section  = $student_data->{$student.':section'};          lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third])
         my $name     = $student_data->{$student.':fullname'};          } (keys(%$classlist));
         my $status   = $student_data->{$student.':Status'};      foreach my $student (@Sorted_Students) {
         my $id       = $student_data->{$student.':id'};          my $username = $classlist->{$student}->[$index{'username'}];
         next if (($statusmode ne 'any') && ($status ne $statusmode));          my $domain   = $classlist->{$student}->[$index{'domain'}];
           my $section  = $classlist->{$student}->[$index{'section'}];
           my $name     = $classlist->{$student}->[$index{'fullname'}];
           my $id       = $classlist->{$student}->[$index{'id'}];
           my $status   = $classlist->{$student}->[$index{'status'}];
           next if (($statusmode ne 'Any') && ($status ne $statusmode));
         if ($mode eq 'view') {          if ($mode eq 'view') {
             $r->print("<tr>\n    <td>\n        ");              $r->print("<tr>\n    <td>\n        ");
             if ($linkto eq 'nothing') {              if ($linkto eq 'nothing') {
Line 844  END Line 877  END
             } elsif ($linkto eq 'modify') {              } elsif ($linkto eq 'modify') {
                 $r->print('<a href="/adm/dropadd?action=modifystudent'.                  $r->print('<a href="/adm/dropadd?action=modifystudent'.
                           '&state=selected'.'&sname='.$username.                            '&state=selected'.'&sname='.$username.
                           '&sdom='.$domain.'">'.$username."</a>\n");                            '&sdom='.$domain.'&sortby='.$sortby.'">'.
                             $username."</a>\n");
             }              }
             $r->print(<<"END");              $r->print(<<"END");
     </td>      </td>
Line 876  END Line 910  END
 sub print_modify_student_form {  sub print_modify_student_form {
     my $r = shift();      my $r = shift();
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['sdom','sname']);                                              ['sdom','sname','sortby']);    
           my $sname  = $ENV{'form.sname'};
     my $sname = $ENV{'form.sname'};      my $sdom   = $ENV{'form.sdom'};
     my $sdom  = $ENV{'form.sdom'};      my $sortby = $ENV{'form.sortby'};
     # determine the students name information      # determine the students name information
     my %info=&Apache::lonnet::get('environment',      my %info=&Apache::lonnet::get('environment',
                                   ['firstname','middlename',                                    ['firstname','middlename',
Line 914  Only domain coordinators can change a us Line 948  Only domain coordinators can change a us
 <input type="hidden" name="slogin"  value="$sname"  />  <input type="hidden" name="slogin"  value="$sname"  />
 <input type="hidden" name="sdomain" value="$sdom" />  <input type="hidden" name="sdomain" value="$sdom" />
 <input type="hidden" name="action"  value="modifystudent" />  <input type="hidden" name="action"  value="modifystudent" />
 <input type="hidden" name="state"  value="done" />  <input type="hidden" name="state"   value="done" />
   <input type="hidden" name="sortby"  value="$sortby" />
 <h2>Modify Enrollment for $info{'firstname'} $info{'middlename'}   <h2>Modify Enrollment for $info{'firstname'} $info{'middlename'} 
 $info{'lastname'} $info{'generation'}, $sname\@$sdom</h2>  $info{'lastname'} $info{'generation'}, $sname\@$sdom</h2>
 <p>  <p>
Line 930  $info{'lastname'} $info{'generation'}, $ Line 965  $info{'lastname'} $info{'generation'}, $
 </p><p>  </p><p>
 <b>Student ID</b>: <input type="text" name="id" value="$info{'id'}" size="12"/>  <b>Student ID</b>: <input type="text" name="id" value="$info{'id'}" size="12"/>
 </p><p>  </p><p>
   <input type="checkbox" name="forceid" > 
   Disable ID/Student Number Safeguard and Force Change of Conflicting IDs
   (only do if you know what you are doing)
   </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>  </p><p>
 <table>  <table>
Line 948  END Line 987  END
 #  #
 sub modify_single_student {  sub modify_single_student {
     my $r = shift;      my $r = shift;
     # make sure user can modify student data?      # Get the 'sortby' variable so the user does not need to re-sort
       my $sortby = $ENV{'form.sortby'};
       #
       # We always need this information
       my $slogin     = $ENV{'form.slogin'};
       my $sdom       = $ENV{'form.sdomain'};
       #
       # Get the old data
       my %old=&Apache::lonnet::get('environment',
                                    ['firstname','middlename',
                                     'lastname','generation','id'],
                                    $sdom, $slogin);
       my ($tmp) = keys(%old);
       if ($tmp =~ /^(con_lost|error|no_such_host)/i) {
           $r->print("There was an error determining the environment values ".
                     " for $slogin \@ $sdom.");
           return;
       }
       undef $tmp;
       #
       # Get the new data
     my $firstname  = $ENV{'form.firstname'};      my $firstname  = $ENV{'form.firstname'};
     my $middlename = $ENV{'form.middlename'};      my $middlename = $ENV{'form.middlename'};
     my $lastname   = $ENV{'form.lastname'};      my $lastname   = $ENV{'form.lastname'};
     my $generation = $ENV{'form.generation'};      my $generation = $ENV{'form.generation'};
     my $section    = $ENV{'form.section'};      my $section    = $ENV{'form.section'};
     my $courseid   = $ENV{'request.course.id'};      my $courseid   = $ENV{'request.course.id'};
     my $sname      = $ENV{'form.slogin'};  
     my $sdom       = $ENV{'form.sdomain'};  
     my $sid        = $ENV{'form.id'};      my $sid        = $ENV{'form.id'};
     my $starttime = &Apache::lonhtmlcommon::get_date_from_form('startdate',      my $starttime = &Apache::lonhtmlcommon::get_date_from_form('startdate',
                                                                time);                                                                 time);
Line 964  sub modify_single_student { Line 1021  sub modify_single_student {
                                                                time);                                                                 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
       if (($sid ne $old{'id'}) && (! exists($ENV{'form.forceid'}))) {
           $r->print("<font color=\"ff0000\">You changed the students id ".
                     " but did not disable the ID change safeguard.".
                     "  The students id will not be changed.</font>");
           $sid = $old{'id'};
       }
       #
     # talk to the user about what we are going to do      # talk to the user about what we are going to do
     $r->print(<<END);      $r->print(<<END);
 <h2>Modifying data for user $sname \@ $sdom </h2>      <h2>Modifying data for user $slogin \@ $sdom </h2>
 <h3>Student Information</h3>  <h3>Student Information</h3>
 <table>  <table rules="rows" border="1" cellpadding="3" >
 <tr><td>First name  </td><td> $firstname  </td></tr>  <tr>
 <tr><td>Middle name </td><td> $middlename </td></tr>      <th> Field </th>
 <tr><td>Last name   </td><td> $lastname   </td></tr>      <th> Old Value </th>
 <tr><td>Generation  </td><td> $generation </td></tr>      <th> New Value </th>
   </tr>
   <tr>
       <td> <b>First name</b> </td>
       <td> $old{'firstname'} </td>
       <td> $firstname </td>
   </tr><tr>
       <td> <b>Middle name</b> </td>
       <td> $old{'middlename'} </td>
       <td> $middlename </td>
   </tr><tr>
       <td> <b>Last name</b> </td>
       <td> $old{'lastname'} </td>
       <td> $lastname </td>
   </tr><tr>
       <td> <b>Generation</b> </td>
       <td> $old{'generation'} </td>
       <td> $generation </td>
   </tr><tr>
       <td> <b>ID</b> </td>
       <td> $old{'id'} </td>
       <td> $sid </td>
   </tr>
 </table>  </table>
 <h3>Role Information</h3>  <h3>Role Information</h3>
 <table>  <table>
Line 982  sub modify_single_student { Line 1070  sub modify_single_student {
 </table>  </table>
 <p>  <p>
 END  END
       #
     # Send request(s) to modify data      # Send request(s) to modify data
     #   The '1' in the call to modifystudent is to force the students   
     #   id to be changed.  
     my $roleresults = &Apache::lonnet::modifystudent      my $roleresults = &Apache::lonnet::modifystudent
         ($sdom,$sname,$sid,undef,undef,$firstname,$middlename,$lastname,          ($sdom,$slogin,$sid,undef,undef,$firstname,$middlename,$lastname,
          $generation,$section,$endtime,$starttime,1);           $generation,$section,$endtime,$starttime,$ENV{'form.forceid'});
     if ($roleresults =~/refused/) {      if ($roleresults eq 'refused' ) {
         $r->print("Your request to change the role information for this ".          $r->print("Your request to change the role information for this ".
                   "student was refused.");                    "student was refused.  You do not appear to have ".
                     "sufficient authority to change student information.");
     } elsif ($roleresults !~ /ok/) {      } elsif ($roleresults !~ /ok/) {
         $r->print("An error occurred during the attempt to change the role".          $r->print("An error occurred during the attempt to change the role".
                   " information for this student.  <br />".                    " information for this student.  <br />".
                   "The error reported was ".                    "The error reported was ".
                   $roleresults);                    $roleresults);
           &Apache::lonnet::logthis("londropadd:failed attempt to modify student".
                                    " data for ".$slogin." \@ ".$sdom." by ".
                                    $ENV{'user.name'}." \@ ".$ENV{'user.domain'}.
                                    ":".$roleresults);
     } else { # everything is okay!      } else { # everything is okay!
         $r->print("Student information updated successfully. <br />".          $r->print("Student information updated successfully. <br />".
                   "The student must log out and log in again to see ".                    "The student must log out and log in again to see ".
Line 1003  END Line 1095  END
     }      }
     $r->print(<<END);      $r->print(<<END);
 </p><p>  </p><p>
 <a href="/adm/dropadd?action=modifystudent">Modify another students data</a>  <a href="/adm/dropadd?action=modifystudent&sortby=$sortby">Modify another students data</a>
 </body></html>  </body></html>
 END  END
     return;      return;
Line 1042  sub get_enrollment_data { Line 1134  sub get_enrollment_data {
     return ($start,$end,$section);      return ($start,$end,$section);
 }  }
   
 # =================================================== Show student list to drop  #################################################
   #################################################
   
   =pod
   
   =item show_drop_list
   
   Display a list of students to drop
   Inputs: 
   
   =over 4
   
   =item $r, Apache request
   
   =item $classlist, hash pointer returned from loncoursedata::get_classlist();
   
   =item $keylist, array pointer returned from loncoursedata::get_classlist() 
   which describes the order elements are stored in the %$classlist values.
   
   =item $nosort, if true, sorting links are omitted.
   
   =back
   
   =cut
   
   #################################################
   #################################################
 sub show_drop_list {  sub show_drop_list {
     my ($students,$student_data,$r)=@_;      my ($r,$classlist,$keylist,$nosort)=@_;
     my $cid=$ENV{'request.course.id'};      my $cid=$ENV{'request.course.id'};
     $r->print(<<'END');      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
 <input type="hidden" name="action" value="drop" />                                              ['sortby']);
       my $sortby = $ENV{'form.sortby'};
       if ($sortby !~ /^(username|domain|section|fullname|id)$/) {
           $sortby = 'username';
       }
       #
       my $action = "drop";
       $r->print(<<END);
   <input type="hidden" name="sortby" value="$sortby" />
   <input type="hidden" name="action" value="$action" />
 <input type="hidden" name="state"  value="done" />  <input type="hidden" name="state"  value="done" />
 <script>  <script>
 function checkAll(field) {  function checkAll(field) {
Line 1062  function uncheckAll(field) { Line 1189  function uncheckAll(field) {
 </script>  </script>
 <p>  <p>
 <input type="hidden" name="phase" value="four">  <input type="hidden" name="phase" value="four">
   END
   
       if ($nosort) {
           $r->print(<<END);
   <table border=2>
   <tr>
       <th>&nbsp;</th>
       <th>username</th>
       <th>domain</th>
       <th>ID</th>
       <th>student name</th>
       <th>section</th>
   </tr>
   END
   
       } else  {
           $r->print(<<END);
 <table border=2>  <table border=2>
 <tr><th>&nbsp;</th><th>username</th><th>domain</th>  <tr><th>&nbsp;</th>
     <th>ID</th><th>student name</th><th>section</th></tr>      <th>
          <a href="/adm/dropadd?action=$action&sortby=username">username</a>
       </th><th>
          <a href="/adm/dropadd?action=$action&sortby=domain">domain</a>
       </th><th>
          <a href="/adm/dropadd?action=$action&sortby=id">ID</a>
       </th><th>
          <a href="/adm/dropadd?action=$action&sortby=fullname">student name</a>
       </th><th>
          <a href="/adm/dropadd?action=$action&sortby=section">section</a>
       </th>
   </tr>
 END  END
     foreach my $student (@$students) {      }
       #
       # Sort the students
       my %index;
       my $i;
       foreach (@$keylist) {
           $index{$_} = $i++;
       }
       my $index  = $index{$sortby};
       my $second = $index{'username'};
       my $third  = $index{'domain'};
       my @Sorted_Students = sort {
           lc($classlist->{$a}->[$index])  cmp lc($classlist->{$b}->[$index])
               ||
           lc($classlist->{$a}->[$second]) cmp lc($classlist->{$b}->[$second])
               ||
           lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third])
           } (keys(%$classlist));
       foreach my $student (@Sorted_Students) {
         my $error;          my $error;
         if (exists($student_data->{$student.':error'})) {          my $username = $classlist->{$student}->[$index{'username'}];
             $error = $student_data->{$student.':error'};          my $domain   = $classlist->{$student}->[$index{'domain'}];
         }          my $section  = $classlist->{$student}->[$index{'section'}];
         if ($error) {          my $name     = $classlist->{$student}->[$index{'fullname'}];
             $r->print('<tr><td colspan="6">'.          my $id       = $classlist->{$student}->[$index{'id'}];
                       '<font color="#FF8888">Error</font>'.          my $status   = $classlist->{$student}->[$index{'status'}];
                       'Error retrieving data for '.  
                       join('@',split(/:/,$student)).  
                       ', '.$error.'</td></tr>'."\n");  
             next;  
         }  
         my $username = $student_data->{$student.':username'};  
         my $domain   = $student_data->{$student.':domain'};  
         my $section  = $student_data->{$student.':section'};  
         my $name     = $student_data->{$student.':fullname'};  
         my $status   = $student_data->{$student.':Status'};  
         my $id       = $student_data->{$student.':id'};  
         next if ($status ne 'Active');          next if ($status ne 'Active');
         #          #
         $r->print(<<"END");          $r->print(<<"END");
Line 1253  sub upfile_drop_add { Line 1415  sub upfile_drop_add {
                             }                              }
                         }                          }
                     }                      }
                       # Clean up whitespace
                       foreach (\$domain,\$username,\$id,\$fname,\$mname,
                                \$lname,\$gen,\$sec) {
                           $$_ =~ s/(\s+$|^\s+)//g;
                       }
                     if ($password) {                      if ($password) {
                         &modifystudent($domain,$username,$cid,$sec,                          &modifystudent($domain,$username,$cid,$sec,
                                        $desiredhost);                                         $desiredhost);
Line 1279  sub upfile_drop_add { Line 1446  sub upfile_drop_add {
                 }                  }
             }              }
         } # end of foreach (@studentdata)          } # end of foreach (@studentdata)
         $r->print('<p>Processed Students: '.$count);          $r->print('<p>Processed Students: '.$count.'</p>');
           $r->print("<p>If active, the new role will be available when the ".
                     "students next log in to LON-CAPA.</p>");
         #####################################          #####################################
         #           Drop students           #          #           Drop students           #
         #####################################          #####################################
         if ($ENV{'form.fullup'} eq 'yes') {          if ($ENV{'form.fullup'} eq 'yes') {
             $r->print('<h3>Dropping Students</h3>');              $r->print('<h3>Dropping Students</h3>');
             #  Get current classlist              #  Get current classlist
             my ($error,%currentlist)=&get_current_classlist($r);              my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();
             if (defined($error)) {              if (! defined($classlist)) {
                 $r->print('<pre>ERROR:$error</pre>');                  $r->print("There are no students currently enrolled.\n");
             }              } else {
             if (defined(%currentlist)) {                  # Remove the students we just added from the list of students.
                 # Drop the students  
                 foreach (@studentdata) {                  foreach (@studentdata) {
                     my %entries=&Apache::loncommon::record_sep($_);                      my %entries=&Apache::loncommon::record_sep($_);
                     unless (($entries{$fields{'username'}} eq '') ||                      unless (($entries{$fields{'username'}} eq '') ||
                             (!defined($entries{$fields{'username'}}))) {                              (!defined($entries{$fields{'username'}}))) {
                         delete($currentlist{$entries{$fields{'username'}}.                          delete($classlist->{$entries{$fields{'username'}}.
                                                 ':'.$domain});                                                  ':'.$domain});
                     }                      }
                 }                  }
                 # Print out list of dropped students                  # Print out list of dropped students.
                 &show_drop_list($r,%currentlist);                  &show_drop_list($r,$classlist,$keylist,'nosort');
             } else {  
                 $r->print("There are no students currently enrolled.\n");  
             }              }
         }          }
     } # end of unless      } # end of unless
 }  }
   
 ###################################################################  
 ###################################################################  
   
 =pod  
   
 =item &drop_students  
   
 Inputs: \@droplist, a pointer to an array of students to drop.  
 Students should be in format of studentname:studentdomain  
   
 Returns: $errors, a string describing any errors encountered.  
 $successes, a string describing the successful dropping of students.  
   
 =cut  
   
 ###################################################################  
 ###################################################################  
 sub drop_students {  
     my @droplist = @{shift()};  
     my $courseid = $ENV{'request.course.id'};  
     my $successes = '';  
     my $errors = '';  
     foreach (@droplist) {  
         my ($sname,$sdom)=split(/:/,$_);  
         my $result = &drop_student($sname,$sdom,$courseid);  
         if ($result !~ /ok/) {  
             $errors .= "Error dropping $sname\@$sdom: $result\n";  
         } else {  
             $successes .= "Dropped $sname\@$sdom\n";  
         }  
     }  
     return ($errors,$successes);  
 }  
 ###################################################################  
 ###################################################################  
   
   
 # ================================================================== Phase four  # ================================================================== Phase four
 sub drop_student_list {  sub drop_student_list {
     my $r=shift;      my $r=shift;
Line 1358  sub drop_student_list { Line 1487  sub drop_student_list {
     }      }
     foreach (@droplist) {      foreach (@droplist) {
         my ($uname,$udom)=split(/\:/,$_);          my ($uname,$udom)=split(/\:/,$_);
           # drop student
         my $result = &modifystudent($udom,$uname,$ENV{'request.course.id'});          my $result = &modifystudent($udom,$uname,$ENV{'request.course.id'});
         if ($result eq 'ok' || $result eq 'ok:') {          if ($result eq 'ok' || $result eq 'ok:') {
             $r->print('Dropped '.$uname.' at '.$udom.'<br>');              $r->print('Dropped '.$uname.' @ '.$udom.'<br>');
         } else {          } else {
             $r->print('Error dropping '.$uname.' at '.$udom.': '.$result.              $r->print('Error dropping '.$uname.' @ '.$udom.': '.$result.
                       '<br />');                        '<br />');
         }          }
         $count++;          $count++;
Line 1456  sub handler { Line 1586  sub handler {
         } elsif ($ENV{'form.state'} eq 'done') {          } elsif ($ENV{'form.state'} eq 'done') {
             &drop_student_list($r);              &drop_student_list($r);
         } else {          } else {
             &menu_phase_two_drop($r);              &print_drop_menu($r);
         }          }
     } elsif ($ENV{'form.action'} eq 'enrollstudent') {      } elsif ($ENV{'form.action'} eq 'enrollstudent') {
         if (! exists($ENV{'form.state'})) {          if (! exists($ENV{'form.state'})) {

Removed from v.1.52  
changed lines
  Added in v.1.57


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