--- loncom/interface/lonuserutils.pm	2008/08/13 08:17:58	1.61
+++ loncom/interface/lonuserutils.pm	2008/09/12 00:55:37	1.66
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Utility functions for managing LON-CAPA user accounts
 #
-# $Id: lonuserutils.pm,v 1.61 2008/08/13 08:17:58 bisitz Exp $
+# $Id: lonuserutils.pm,v 1.66 2008/09/12 00:55:37 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -169,7 +169,7 @@ sub propagate_id_change {
 }
 
 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 @@ sub update_classlist {
     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].':';
         }
@@ -558,7 +580,7 @@ function verify(vf,sec_caller) {
         if (tw==11) { foundrole=1; }
         if (tw==12) { founddomain=1; }
     }
-    verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail,foundrole,founddom);
+    verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail,foundrole,founddomain);
 }
 
 //
@@ -1315,7 +1337,9 @@ sub print_userlist {
     if ($context eq 'course') {
         if (($env{'form.showrole'} eq 'st') || ($env{'form.showrole'} eq 'Any')) { 
             my $classlist = &Apache::loncoursedata::get_classlist();
-            %userlist = %{$classlist};
+            if (ref($classlist) eq 'HASH') {
+                %userlist = %{$classlist};
+            }
         }
         if ($env{'form.showrole'} ne 'st') {
             my $showroles;
@@ -2219,9 +2243,9 @@ END
                        time.'_'.rand(1000000000).'.csv';
         unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) {
             $r->log_error("Couldn't open $CSVfilename for output $!");
-            $r->print("Problems occured in writing the csv file.  ".
-                      "This error has been logged.  ".
-                      "Please alert your LON-CAPA administrator.");
+            $r->print(&mt('Problems occurred in writing the csv file. '
+                         .'This error has been logged. '
+                         .'Please alert your LON-CAPA administrator.'));
             $CSVfile = undef;
         }
         #
@@ -2537,9 +2561,8 @@ END
                   &mt('Your Excel spreadsheet').'</a> '.&mt('is ready for download').'.</p>'."\n");
     } elsif ($mode eq 'csv') {
         close($CSVfile);
-        $r->print('<a href="'.$CSVfilename.'">'.
-                  &mt('Your CSV file').'</a> is ready for download.'.
-                  "\n");
+        $r->print('<p><a href="'.$CSVfilename.'">'.
+                  &mt('Your CSV file').'</a> '.&mt('is ready for download').'.</p>'."\n");
         $r->rflush();
     }
     if ($mode eq 'autoenroll') {
@@ -3486,7 +3509,9 @@ sub upfile_drop_add {
             if ($context eq 'course') {
                 my ($cnum,$cdom) = &get_course_identity();
                 my $roster = &Apache::loncoursedata::get_classlist();
-                %userlist = %{$roster};
+                if (ref($roster) eq 'HASH') {
+                    %userlist = %{$roster};
+                }
                 my %advrolehash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef,
                                                          \@statuses,\@poss_roles);
                 &gather_userinfo($context,'view',\%userlist,$indexhash,\%info,
@@ -3592,16 +3617,8 @@ sub upfile_drop_add {
                               '</b>');
                     next;
                 } else {
-                    my $baddom = 0;
                     if ($entries{$fields{'dom'}} 
                         ne &LONCAPA::clean_domain($entries{$fields{'domain'}})) {
-                        $baddom = 1;
-                    } else {
-                        if (&Apache::lonnet::domain($entries{$fields{'domain'}}) eq '') {
-                            $baddom = 1;
-                        }
-                    }
-                    if ($baddom) {
                         $r->print('<br />'. '<b>'.$entries{$fields{'domain'}}.
                                   '</b>: '.&mt('Unacceptable domain for user [_2] [_3] [_4] [_5]',$fname,$mname,$lname,$gen).'</b>');
                         next;
@@ -3885,7 +3902,7 @@ sub upfile_drop_add {
                           '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'.
                           &mt('There are no students with current/future access to the course.').
                           '</form>'."\n");
-            } else {
+            } elsif (ref($classlist) eq 'HASH') {
                 # Remove the students we just added from the list of students.
                 foreach my $line (@userdata) {
                     my %entries=&Apache::loncommon::record_sep($line);
@@ -4264,11 +4281,9 @@ sub classlist_drop {
     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 />';
         }