[LON-CAPA-cvs] cvs: loncom /interface londropadd.pm

matthew lon-capa-cvs@mail.lon-capa.org
Wed, 25 Sep 2002 16:16:19 -0000


This is a MIME encoded message

--matthew1032970579
Content-Type: text/plain

matthew		Wed Sep 25 12:16:19 2002 EDT

  Modified files:              
    /loncom/interface	londropadd.pm 
  Log:
  Sorting of classlist (case insensitive) implemented for all but drop classlist.
  
  
--matthew1032970579
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20020925121619.txt"

Index: loncom/interface/londropadd.pm
diff -u loncom/interface/londropadd.pm:1.52 loncom/interface/londropadd.pm:1.53
--- loncom/interface/londropadd.pm:1.52	Tue Sep 24 14:24:43 2002
+++ loncom/interface/londropadd.pm	Wed Sep 25 12:16:19 2002
@@ -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 @@
     } 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 @@
 
 # =================================================== 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 @@
             $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 @@
                       ', '.$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 @@
             } 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 @@
 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 @@
 <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 @@
 </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 @@
 #
 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 @@
                                                                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 @@
 </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 @@
     }
     $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 @@
 
 # =================================================== 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 @@
 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 @@
                       ', '.$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");

--matthew1032970579--