--- loncom/interface/Attic/londropadd.pm 2002/09/24 18:24:43 1.52 +++ loncom/interface/Attic/londropadd.pm 2002/09/25 16:16:19 1.53 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to drop and add students in courses # -# $Id: londropadd.pm,v 1.52 2002/09/24 18:24:43 matthew Exp $ +# $Id: londropadd.pm,v 1.53 2002/09/25 16:16:19 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -773,9 +773,11 @@ END } else { # Print out the available choices if ($ENV{'form.action'} eq 'modifystudent') { - &show_class_list($r,'view','modify','any',$student_array,$student_data); + &show_class_list($r,'view','modify','modifystudent', + 'any',$student_array,$student_data); } else { - &show_class_list($r,'view','aboutme','any',$student_array,$student_data); + &show_class_list($r,'view','aboutme','classlist', + 'any',$student_array,$student_data); } } } @@ -794,8 +796,14 @@ sub print_csv_classlist { # =================================================== Show student list to drop sub show_class_list { - my ($r,$mode,$linkto,$statusmode,$students,$student_data)=@_; + my ($r,$mode,$linkto,$action,$statusmode,$students,$s_data)=@_; 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 if ($mode eq 'view') { if ($linkto eq 'aboutme') { @@ -804,19 +812,37 @@ sub show_class_list { $r->print('Select a user name to modify the students information'); } $r->print(<<END); +<input type="hidden" name="sortby" value="$sortby" /> <p> <table border=2> -<tr><th>username</th><th>domain</th><th>ID</th> - <th>student name</th><th>section</th></tr> +<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 } elsif ($mode eq 'csv') { $r->print('"'.join('","',("username","domain","ID","student name", "section")).'"'."\n"); } - foreach my $student (@$students) { + my @Sorted_Students = sort { + lc($s_data->{$a.':'.$sortby}) cmp lc($s_data->{$b.':'.$sortby}) + || + lc($s_data->{$a.':username'}) cmp lc($s_data->{$b.':username'}) + || + lc($s_data->{$a.':domain'}) cmp lc($s_data->{$b.':domain'}) + } @$students; + foreach my $student (@Sorted_Students) { my $error; - if (exists($student_data->{$student.':error'})) { - $error = $student_data->{$student.':error'}; + if (exists($s_data->{$student.':error'})) { + $error = $s_data->{$student.':error'}; } if ($error) { $r->print('<tr><td colspan="6">'. @@ -826,12 +852,12 @@ END ', '.$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'}; + my $username = $s_data->{$student.':username'}; + my $domain = $s_data->{$student.':domain'}; + my $section = $s_data->{$student.':section'}; + my $name = $s_data->{$student.':fullname'}; + my $status = $s_data->{$student.':Status'}; + my $id = $s_data->{$student.':id'}; next if (($statusmode ne 'any') && ($status ne $statusmode)); if ($mode eq 'view') { $r->print("<tr>\n <td>\n "); @@ -844,7 +870,8 @@ END } elsif ($linkto eq 'modify') { $r->print('<a href="/adm/dropadd?action=modifystudent'. '&state=selected'.'&sname='.$username. - '&sdom='.$domain.'">'.$username."</a>\n"); + '&sdom='.$domain.'&sortby='.$sortby.'">'. + $username."</a>\n"); } $r->print(<<"END"); </td> @@ -876,10 +903,10 @@ END sub print_modify_student_form { my $r = shift(); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['sdom','sname']); - - my $sname = $ENV{'form.sname'}; - my $sdom = $ENV{'form.sdom'}; + ['sdom','sname','sortby']); + my $sname = $ENV{'form.sname'}; + my $sdom = $ENV{'form.sdom'}; + my $sortby = $ENV{'form.sortby'}; # determine the students name information my %info=&Apache::lonnet::get('environment', ['firstname','middlename', @@ -914,7 +941,8 @@ Only domain coordinators can change a us <input type="hidden" name="slogin" value="$sname" /> <input type="hidden" name="sdomain" value="$sdom" /> <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'} $info{'lastname'} $info{'generation'}, $sname\@$sdom</h2> <p> @@ -930,6 +958,10 @@ $info{'lastname'} $info{'generation'}, $ </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"/> </p><p> <table> @@ -948,15 +980,33 @@ END # sub modify_single_student { 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 $middlename = $ENV{'form.middlename'}; my $lastname = $ENV{'form.lastname'}; my $generation = $ENV{'form.generation'}; my $section = $ENV{'form.section'}; my $courseid = $ENV{'request.course.id'}; - my $sname = $ENV{'form.slogin'}; - my $sdom = $ENV{'form.sdomain'}; my $sid = $ENV{'form.id'}; my $starttime = &Apache::lonhtmlcommon::get_date_from_form('startdate', time); @@ -964,15 +1014,46 @@ sub modify_single_student { time); my $displayable_starttime = localtime($starttime); 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 $r->print(<<END); -<h2>Modifying data for user $sname \@ $sdom </h2> + <h2>Modifying data for user $slogin \@ $sdom </h2> <h3>Student Information</h3> -<table> -<tr><td>First name </td><td> $firstname </td></tr> -<tr><td>Middle name </td><td> $middlename </td></tr> -<tr><td>Last name </td><td> $lastname </td></tr> -<tr><td>Generation </td><td> $generation </td></tr> +<table rules="rows" border="1" cellpadding="3" > +<tr> + <th> Field </th> + <th> Old Value </th> + <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> <h3>Role Information</h3> <table> @@ -982,20 +1063,24 @@ sub modify_single_student { </table> <p> END + # # 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 - ($sdom,$sname,$sid,undef,undef,$firstname,$middlename,$lastname, - $generation,$section,$endtime,$starttime,1); - if ($roleresults =~/refused/) { + ($sdom,$slogin,$sid,undef,undef,$firstname,$middlename,$lastname, + $generation,$section,$endtime,$starttime,$ENV{'form.forceid'}); + if ($roleresults eq 'refused' ) { $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/) { $r->print("An error occurred during the attempt to change the role". " information for this student. <br />". "The error reported was ". $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! $r->print("Student information updated successfully. <br />". "The student must log out and log in again to see ". @@ -1003,7 +1088,7 @@ END } $r->print(<<END); </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> END return; @@ -1044,7 +1129,7 @@ sub get_enrollment_data { # =================================================== Show student list to drop sub show_drop_list { - my ($students,$student_data,$r)=@_; + my ($students,$s_data,$r)=@_; my $cid=$ENV{'request.course.id'}; $r->print(<<'END'); <input type="hidden" name="action" value="drop" /> @@ -1068,8 +1153,8 @@ function uncheckAll(field) { END foreach my $student (@$students) { my $error; - if (exists($student_data->{$student.':error'})) { - $error = $student_data->{$student.':error'}; + if (exists($s_data->{$student.':error'})) { + $error = $s_data->{$student.':error'}; } if ($error) { $r->print('<tr><td colspan="6">'. @@ -1079,12 +1164,12 @@ END ', '.$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'}; + my $username = $s_data->{$student.':username'}; + my $domain = $s_data->{$student.':domain'}; + my $section = $s_data->{$student.':section'}; + my $name = $s_data->{$student.':fullname'}; + my $status = $s_data->{$student.':Status'}; + my $id = $s_data->{$student.':id'}; next if ($status ne 'Active'); # $r->print(<<"END");