--- loncom/interface/lonuserutils.pm	2011/08/05 14:46:58	1.136
+++ loncom/interface/lonuserutils.pm	2012/02/09 22:06:16	1.136.6.3
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Utility functions for managing LON-CAPA user accounts
 #
-# $Id: lonuserutils.pm,v 1.136 2011/08/05 14:46:58 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.136.6.3 2012/02/09 22:06:16 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -342,7 +342,8 @@ sub print_upload_manager_header {
              ."</p>\n");
     $r->print('<div class="LC_left_float"><h3>'.
               &mt('Identify fields in uploaded list')."</h3>\n");
-    $r->print(&mt('Enter as many fields as you can.<br /> The system will inform you and bring you back to this page, <br /> if the data selected are insufficient to add users.')."<br />\n");
+    $r->print(&mt('Enter as many fields as you can.').'<br />'.
+             &mt('The system will inform you and bring you back to this page, [_1]if the data selected are insufficient to add users.','<br />')."<br />\n");
     $r->print(&hidden_input('action','upload').
               &hidden_input('state','got_file').
               &hidden_input('associate','').
@@ -2321,6 +2322,7 @@ END
                        'type'       => "enroll type/action",
                        'email'      => "e-mail address",
                        'photo'      => "photo",
+                       'lastlogin'  => "last login",
                        'extent'     => "extent",
                        'pr'         => "Proceed",
                        'ca'         => "check all",
@@ -2369,6 +2371,9 @@ END
             push(@cols,'groups');
         }
         push(@cols,'email');
+        if ($context eq 'course') {
+            push(@cols,'lastlogin');
+        }
     }
 
     my $rolefilter = $env{'form.showrole'};
@@ -2593,6 +2598,11 @@ END
                                                 Future  => 'Future',
                                                 Expired => 'Expired',
                                                );
+    # If this is for a single course get last course "log-in".
+    my %crslogins;
+    if ($context eq 'course') {
+        %crslogins=&Apache::lonnet::dump('nohist_crslastlogin',$cdom,$cnum);
+    }
     # Get groups, role, permanent e-mail so we can sort on them if
     # necessary.
     foreach my $user (keys(%{$userlist})) {
@@ -2741,6 +2751,12 @@ END
                 $in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'});
             }
         }
+        if ($context eq 'course') {
+            my $lastlogin = $crslogins{$in{'username'}.':'.$in{'domain'}.':'.$in{'section'}.':'.$role};
+            if ($lastlogin ne '') {
+                $in{'lastlogin'} = &Apache::lonlocal::locallocaltime($lastlogin);
+            }
+        }
         if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll' || $mode eq 'pickauthor') {
             $r->print(&Apache::loncommon::start_data_table_row());
             my $checkval;
@@ -4165,10 +4181,32 @@ sub upfile_drop_add {
                         }
                         $checkid = 1;
                         $newuser = 1;
-                        my $user = $username.':'.$newuserdom;
+                        if ($username =~/^[^\@]+\@[^\@]+$/) {
+                            if ($email eq '') {
+                                $email = $username;
+                            }
+                            my $lc_email;
+                            if ($username eq $email) {
+                                $lc_email = lc($email);
+                            }
+                            my $lc_username = lc($username);
+                            if ($lc_username ne $username) {
+                                if ($username eq $email) {
+                                    $email = $lc_username;
+                                }
+                                $username = $lc_username;
+                                $uhome=&Apache::lonnet::homeserver($username,$userdomain);
+                                if ($uhome ne 'no_host') {
+                                    $newuser = 0;
+                                }
+                            }
+                        }
+                    }
+                    my $user = $username.':'.$newuserdom;
+                    if ($newuser) {
                         my $checkhash;
                         my $checks = { 'username' => 1 };
-                        $checkhash->{$username.':'.$newuserdom} = { 'newuser' => 1, };
+                        $checkhash->{$user} = { 'newuser' => 1, };
                         &Apache::loncommon::user_rule_check($checkhash,$checks,
                             \%alerts,\%rulematch,\%inst_results,\%curr_rules,
                             \%got_rules);
@@ -4190,8 +4228,13 @@ sub upfile_drop_add {
                         }
                         unless ($cancreate{$usertype}) {
                             my $showtype = $longtypes{$usertype};
-                            $r->print('<br />'.
-                                      &mt('[_1]: The user does not exist, and you are not permitted to create users of type: [_2].','<b>'.$username.'</b>',$showtype));
+                            if ($usertype eq 'unofficial') {
+                                $r->print('<br />'.
+                                          &mt("[_1]: The user does not exist, and the new user's username must be an e-mail address.",'<b>'.$username.'</b>'));
+                            } else {
+                                $r->print('<br />'.
+                                          &mt("[_1]: The user does not exist, and you are not permitted to create users of type: [_2].",'<b>'.$username.'</b>',$showtype));
+                            }
                             next;
                         }
                     } else {