Diff for /loncom/interface/Attic/londropadd.pm between versions 1.50 and 1.58

version 1.50, 2002/09/17 15:52:44 version 1.58, 2002/10/16 15:02:28
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 ($domain,$identifier) = @_;  
     # domain is the domain the class is being run in  
     # identifier is the internal, unique identifier for the class.  
     my %currentlist=();  
     my $now=time;  
     my %results=&Apache::lonnet::dump('classlist',$domain,$identifier);  
     my ($tmp) = keys(%results);  
     if ($tmp !~ /^(con_lost|error|no_such_host)/i) {  
         foreach my $student (keys(%results)) {  
             # Extract the start and end dates  
             my ($end,$start)=split(/\:/,$results{$student});  
             # If the class isn't over, put it in the list  
             unless (($end) && ($now>$end)) {   
                 $currentlist{$student}=1;  
             }  
         }  
         return (undef,%currentlist);  
     } else {  
         $tmp =~ s/^error://;  
         return ($tmp,undef);  
     }  
 }  
   
 # ========================================================= Menu Phase Two Drop  # ========================================================= Menu Phase Two Drop
 sub menu_phase_two_drop {  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 ($error,%currentlist)=&get_current_classlist      my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist();
         ($ENV{'course.'.$cid.'.domain'},$ENV{'course.'.$cid.'.num'});      if (! defined($classlist)) {
     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");          $r->print("There are no students currently enrolled.\n");
     } else {          return;
         # Print out the available choices  
         &show_drop_list($r,%currentlist);  
     }      }
       # Print out the available choices
       &show_drop_list($r,$classlist,$keylist);
       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="$ENV{'form.action'}" />
   <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 ($error,%currentlist)=&get_current_classlist      my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();
         ($ENV{'course.'.$cid.'.domain'},$ENV{'course.'.$cid.'.num'});      if (! defined($classlist)) {
     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");          $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',%currentlist);              &show_class_list($r,'view','modify','modifystudent',
                                $ENV{'form.Status'},$classlist,$keylist);
         } else {          } else {
             &show_class_list($r,'view','aboutme',%currentlist);              &show_class_list($r,'view','aboutme','classlist',
                                $ENV{'form.Status'},$classlist,$keylist);
         }          }
     }      }
 }  }
Line 806  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 ($error,%currentlist)=&get_current_classlist      my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();
         ($ENV{'course.'.$cid.'.domain'},$ENV{'course.'.$cid.'.num'});      if (! defined($classlist)) {
     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");          $r->print("There are no students currently enrolled.\n");
     } else {      } else {
         &show_class_list($r,'csv','nolink',%currentlist);          &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,%currentlist)=@_;      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>generation</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","last name",          if($statusmode eq 'Expired') {
                                   "first name","middle name","generation",              $r->print('"Students with expired roles"');
                                   "section")).'"'."\n");          }
     }          if ($statusmode eq 'Any') {
     foreach (sort keys %currentlist) {              $r->print('"'.join('","',("username","domain","ID","student name",
         my ($sname,$sdom)=split(/\:/,$_);                                        "section","status")).'"'."\n");
         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) {  
             if ($mode eq 'view') {  
                 $r->print('<tr><td colspan="6"><font color="red">'.  
                     'Internal error: unable to get environment '.  
                         'for '.$sname.' in domain '.$sdom.'</font></td></tr>');  
             } else {  
                 $r->print('"Internal error: unable to get environment for '.  
                           $sname.' in domain '.$sdom.'"');  
             }  
         } else {          } else {
             if ($mode eq 'view') {              $r->print('"'.join('","',("username","domain","ID","student name",
                 $r->print("<tr>\n    <td>\n        ");                                        "section")).'"'."\n");
                 if ($linkto eq 'nothing') {          }
                     $r->print($sname);      }
                 } elsif ($linkto eq 'aboutme') {      #
                     $r->print(&Apache::loncommon::aboutmewrapper($sname,$sname,      # Sort the students
                                                                  $sdom));      my %index;
                 } elsif ($linkto eq 'modify') {      my $i;
                     $r->print('<a href="/adm/dropadd?action=modifystudent'.      foreach (@$keylist) {
                               '&state=selected'.'&sname='.$sname.          $index{$_} = $i++;
                               '&sdom='.$sdom.'">'.$sname."</a>\n");      }
                 }      my $index  = $index{$sortby};
                 $r->print(<<"END");      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 $username = $classlist->{$student}->[$index{'username'}];
           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') {
               $r->print("<tr>\n    <td>\n        ");
               if ($linkto eq 'nothing') {
                   $r->print($username);
               } elsif ($linkto eq 'aboutme') {
                   $r->print(&Apache::loncommon::aboutmewrapper($username,
                                                                $username,
                                                                $domain));
               } elsif ($linkto eq 'modify') {
                   $r->print('<a href="/adm/dropadd?action=modifystudent'.
                             '&state=selected'.'&sname='.$username.
                             '&sdom='.$domain.'&sortby='.$sortby.'">'.
                             $username."</a>\n");
               }
               $r->print(<<"END");
     </td>      </td>
     <td>$sdom</td>      <td>$domain</td>
     <td>$reply{$sname}</td>      <td>$id</td>
     <td>$info{'lastname'}, $info{'firstname'} $info{'middlename'}</td>      <td>$name</td>
     <td>$info{'generation'}</td>      <td>$section</td>
     <td>$ssec</td>  
 </tr>  </tr>
 END  END
             } elsif ($mode eq 'csv') {          } elsif ($mode eq 'csv') {
                 # no need to bother with $linkto              # no need to bother with $linkto
                 my @line = ();              my @line = ();
                 foreach ($sname,$sdom,$reply{$sname},              foreach ($username,$domain,$id,$name,$section) {
                          $info{'lastname'},$info{'firstname'},                  push @line,&Apache::loncommon::csv_translate($_);
                          $info{'middlename'},$info{'generation'},$ssec) {              }
                     push @line,&Apache::loncommon::csv_translate($_);              if ($statusmode eq 'Any') {
                 }                  push @line,&Apache::loncommon::csv_translate($status);
                 my $tmp = $";  
                 $" = '","';  
                 $r->print("\"@line\"\n");  
                 $" = $tmp;  
             }              }
               my $tmp = $";
               $" = '","';
               $r->print("\"@line\"\n");
               $" = $tmp;
         }          }
     }      }
     $r->print('</table><br>') if ($mode eq 'view');      $r->print('</table><br>') if ($mode eq 'view');
Line 908  END Line 921  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',
                                    'lastname','generation'],                                     'lastname','generation','id'],
                                   $sdom, $sname);                                    $sdom, $sname);
     my ($tmp) = keys(%info);      my ($tmp) = keys(%info);
     if ($tmp =~ /^(con_lost|error|no_such_host)/i) {      if ($tmp =~ /^(con_lost|error|no_such_host)/i) {
Line 938  sub print_modify_student_form { Line 951  sub print_modify_student_form {
                                                           $endtime);                                                            $endtime);
     # Make sure student is enrolled in course          # Make sure student is enrolled in course    
     $r->print(<<END);      $r->print(<<END);
   <p>
   <font size="+1">
   Only domain coordinators can change a users password.
   </font>
   </p>
 <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 955  $info{'lastname'} $info{'generation'}, $ Line 974  $info{'lastname'} $info{'generation'}, $
 <input type="text" name="generation" value="$info{'generation'}" /></td></tr>  <input type="text" name="generation" value="$info{'generation'}" /></td></tr>
 </table>  </table>
 </p><p>  </p><p>
   <b>Student ID</b>: <input type="text" name="id" value="$info{'id'}" size="12"/>
   </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 973  END Line 998  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 $sid        = $ENV{'form.id'};
     my $sdom       = $ENV{'form.sdomain'};  
     my $starttime = &Apache::lonhtmlcommon::get_date_from_form('startdate',      my $starttime = &Apache::lonhtmlcommon::get_date_from_form('startdate',
                                                                time);                                                                 time);
     my $endtime   = &Apache::lonhtmlcommon::get_date_from_form('enddate',      my $endtime   = &Apache::lonhtmlcommon::get_date_from_form('enddate',
                                                                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);
 Modifying data for user: $sname \@ $sdom <br />      <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 1004  Modifying data for user: $sname \@ $sdom Line 1079  Modifying data for user: $sname \@ $sdom
 <tr><td>Start Time  </td><td> $displayable_starttime </td></tr>  <tr><td>Start Time  </td><td> $displayable_starttime </td></tr>
 <tr><td>End Time    </td><td> $displayable_endtime   </td></tr>  <tr><td>End Time    </td><td> $displayable_endtime   </td></tr>
 </table>  </table>
   <p>
 END  END
     # send request(s) to modify data      #
     my $roleresults = 'refused';      # Send request(s) to modify data
     #my $roleresults = &Apache::lonnet::assignrole($sdom,$sname,      my $roleresults = &Apache::lonnet::modifystudent
     #                                              $courseid.'/'.$section,          ($sdom,$slogin,$sid,undef,undef,$firstname,$middlename,$lastname,
     #                                              'st',           $generation,$section,$endtime,$starttime,$ENV{'form.forceid'});
     #                                              $endtime,$starttime);      if ($roleresults eq 'refused' ) {
     if ($roleresults =~/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.  The error reported was ".                    " information for this student.  <br />".
                     "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 role updated successfully.");          $r->print("Student information updated successfully. <br />".
                     "The student must log out and log in again to see ".
                     "these changes.");
     }      }
     #   
     $r->print(<<END);      $r->print(<<END);
   </p><p>
   <a href="/adm/dropadd?action=modifystudent&sortby=$sortby">Modify another students data</a>
 </body></html>  </body></html>
 END  END
     return;      return;
Line 1061  sub get_enrollment_data { Line 1145  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 ($r,%currentlist)=@_;      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) {
 {  
     for (i = 0; i < field.length; i++)      for (i = 0; i < field.length; i++)
         field[i].checked = true ;          field[i].checked = true ;
 }  }
   
 function uncheckAll(field)  function uncheckAll(field) {
 {  
     for (i = 0; i < field.length; i++)      for (i = 0; i < field.length; i++)
         field[i].checked = false ;          field[i].checked = false ;
 }  }
 </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>  <table border=2>
 <tr><th>&nbsp;</th><th>username</th><th>domain</th>  
 <th>ID</th><th>student name</th><th>generation</th>  
 <th>section</th></tr>  
 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('<tr><td colspan="7"><font color="red">'.  
                       'Internal error: unable to get environment '.  
                       'for '.$sname.' in domain '.$sdom.'</font></td></tr>');  
         } else {  
             $r->print(<<"END");  
 <tr>  <tr>
     <td><input type="checkbox" name="droplist" value="$_"></td>      <th>&nbsp;</th>
     <td>$sname</td>      <th>username</th>
     <td>$sdom</td>      <th>domain</th>
     <td>$reply{$sname}</td>      <th>ID</th>
     <td>$info{'lastname'}, $info{'firstname'} $info{'middlename'}</td>      <th>student name</th>
     <td>$info{'generation'}</td>      <th>section</th>
     <td>$ssec</td>  </tr>
   END
   
       } else  {
           $r->print(<<END);
   <table border=2>
   <tr><th>&nbsp;</th>
       <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
       }
       #
       # 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 $username = $classlist->{$student}->[$index{'username'}];
           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 ($status ne 'Active');
           #
           $r->print(<<"END");
   <tr>
       <td><input type="checkbox" name="droplist" value="$student"></td>
       <td>$username</td>
       <td>$domain</td>
       <td>$id</td>
       <td>$name</td>
       <td>$section</td>
 </tr>  </tr>
 END  END
         }  
     }      }
     $r->print('</table><br>');      $r->print('</table><br>');
     $r->print(<<"END");      $r->print(<<"END");
Line 1122  END Line 1278  END
 <input type="button" value="uncheck all" onclick="javascript:uncheckAll(document.studentform.droplist)">   <input type="button" value="uncheck all" onclick="javascript:uncheckAll(document.studentform.droplist)"> 
 <p><input type=submit value="Drop Students"></p>  <p><input type=submit value="Drop Students"></p>
 END  END
       return;
 }  }
   
 #  #
Line 1269  sub upfile_drop_add { Line 1426  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 1295  sub upfile_drop_add { Line 1457  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              my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();
                 ($ENV{'course.'.$cid.'.domain'},              if (! defined($classlist)) {
                  $ENV{'course.'.$cid.'.num'});                  $r->print("There are no students currently enrolled.\n");
             if (defined($error)) {              } else {
                 $r->print('<pre>ERROR:$error</pre>');                  # Remove the students we just added from the list of students.
             }  
             if (defined(%currentlist)) {  
                 # 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 1376  sub drop_student_list { Line 1498  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 1470  sub handler { Line 1593  sub handler {
         }          }
     } elsif ($ENV{'form.action'} eq 'drop') {      } elsif ($ENV{'form.action'} eq 'drop') {
         if (! exists($ENV{'form.state'})) {          if (! exists($ENV{'form.state'})) {
             &menu_phase_two_drop($r);              &print_drop_menu($r);
         } 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.50  
changed lines
  Added in v.1.58


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