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

raeburn lon-capa-cvs-allow@mail.lon-capa.org
Wed, 27 Aug 2008 16:54:49 -0000


raeburn		Wed Aug 27 12:54:49 2008 EDT

  Modified files:              
    /loncom/interface	lonuserutils.pm 
  Log:
  &classlist_drop() is called when a student role is deleted.
  - Replace use of lonnet::cput() with &update_classlist().
  - A full record is now written to classlist.db so that loncoursedata::get_classlist()
    will no longer attempt to complete the record (with section set to -1) next time
    the classlist is retrieved.
  - Modify &update_classlist(), originally built to propagate ID/name changes, to support this alternative usage.  
  
  
Index: loncom/interface/lonuserutils.pm
diff -u loncom/interface/lonuserutils.pm:1.62 loncom/interface/lonuserutils.pm:1.63
--- loncom/interface/lonuserutils.pm:1.62	Wed Aug 20 17:28:14 2008
+++ loncom/interface/lonuserutils.pm	Wed Aug 27 12:54:49 2008
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Utility functions for managing LON-CAPA user accounts
 #
-# $Id: lonuserutils.pm,v 1.62 2008/08/20 21:28:14 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.63 2008/08/27 16:54:49 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -169,7 +169,7 @@
 }
 
 sub update_classlist {
-    my ($cdom,$cnum,$udom,$uname,$user) = @_;
+    my ($cdom,$cnum,$udom,$uname,$user,$newend) = @_;
     my ($uid,$classlistentry);
     my $fullname =
         &Apache::lonnet::format_name($user->{'firstname'},$user->{'middlename'},
@@ -180,15 +180,37 @@
     my @classinfo = split(/:/,$classhash{$uname.':'.$udom});
     my $ididx=&Apache::loncoursedata::CL_ID() - 2;
     my $nameidx=&Apache::loncoursedata::CL_FULLNAME() - 2;
+    my $endidx = &Apache::loncoursedata::CL_END() - 2;
+    my $startidx = &Apache::loncoursedata::CL_START() - 2;
     for (my $i=0; $i<@classinfo; $i++) {
-        if ($i == $ididx) {
+        if ($i == $endidx) {
+            if ($newend ne '') {
+                $classlistentry .= $newend.':';
+            } else {
+                $classlistentry .= $classinfo[$i].':';
+            }
+        } elsif ($i == $startidx) {
+            if ($newend ne '') {
+                if ($classinfo[$i] > $newend) {
+                    $classlistentry .= $newend.':';
+                } else {
+                    $classlistentry .= $classinfo[$i].':';
+                }
+            } else {
+                $classlistentry .= $classinfo[$i].':';
+            }
+        } elsif ($i == $ididx) {
             if (defined($user->{'id'})) {
                 $classlistentry .= $user->{'id'}.':';
             } else {
                 $classlistentry .= $classinfo[$i].':';
             }
         } elsif ($i == $nameidx) {
-            $classlistentry .= $fullname.':';
+            if (defined($user->{'lastname'})) {
+                $classlistentry .= $fullname.':';
+            } else {
+                $classlistentry .= $classinfo[$i].':';
+            }
         } else {
             $classlistentry .= $classinfo[$i].':';
         }
@@ -4256,11 +4278,9 @@
     my ($scope,$uname,$udom,$now) = @_;
     my ($cdom,$cnum) = ($scope=~m{^/($match_domain)/($match_courseid)});
     if (&Apache::lonnet::is_course($cdom,$cnum)) {
-        my $user = $uname.':'.$udom;
         if (!&active_student_roles($cnum,$cdom,$uname,$udom)) {
-            my $result =
-                &Apache::lonnet::cput('classlist',
-                                      { $user => $now },$cdom,$cnum);
+            my %user;
+            my $result = &update_classlist($cdom,$cnum,$udom,$uname,\%user,$now);
             return &mt('Drop from classlist: [_1]',
                        '<b>'.$result.'</b>').'<br />';
         }