--- loncom/interface/Attic/londropadd.pm	2003/07/29 20:00:56	1.80
+++ loncom/interface/Attic/londropadd.pm	2003/11/07 21:04:37	1.90
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to drop and add students in courses 
 #
-# $Id: londropadd.pm,v 1.80 2003/07/29 20:00:56 matthew Exp $
+# $Id: londropadd.pm,v 1.90 2003/11/07 21:04:37 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -32,7 +32,7 @@
 # (TeX Content Handler
 #
 ###############################################################
-###############################################################
+##############################################################
 
 package Apache::londropadd;
 
@@ -42,15 +42,17 @@ use Apache::loncommon();
 use Apache::lonhtmlcommon();
 use Apache::Constants qw(:common :http REDIRECT);
 use Spreadsheet::WriteExcel;
+use Apache::lonlocal;
 
 ###############################################################
 ###############################################################
 sub header {
     my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager');
+    my $title = &mt('LON-CAPA Enrollment Manager');
     return(<<ENDHEAD);
 <html>
 <head>
-<title>LON-CAPA Enrollment Manager</title>
+<title>$title</title>
 </head>
 $bodytag
 <form method="post" enctype="multipart/form-data"  
@@ -79,7 +81,7 @@ sub modifystudent {
             # We are in this course
             my $section=$1;
             $section='' if ($course eq $courseid.'_st');
-            if ($section eq $csec) {
+            if (defined($csec) && $section eq $csec) {
                 $result .= 'ok:';
             } elsif ( ((!$section) && (!$csec)) || ($section ne $csec) ) {
                 my (undef,$end,$start)=split(/\_/,$roles{$course});
@@ -139,26 +141,33 @@ sub domain_form {
 #  Menu Phase One
 sub print_main_menu {
     my $r=shift;
+    my %Text = &Apache::lonlocal::texthash
+        ('upload'    => 'Upload a class list',
+         'enrollone' => 'Enroll a single student',
+         'modify'    => 'Modify student data',
+         'view'      => 'View Class List',
+         'drop'      => 'Drop Students');
+
     $r->print(<<END);
 <p>
 <font size="+1">
-    <a href="/adm/dropadd?action=upload">Upload a course list</a>
+    <a href="/adm/dropadd?action=upload">$Text{'upload'}</a>
 </font>
 </p><p>
 <font size="+1">
-    <a href="/adm/dropadd?action=enrollstudent">Enroll a single student</a>
+    <a href="/adm/dropadd?action=enrollstudent">$Text{'enrollone'}</a>
 </font>
 </p><p>
 <font size="+1">
-    <a href="/adm/dropadd?action=modifystudent">Modify student data</a>
+    <a href="/adm/dropadd?action=modifystudent">$Text{'modify'}</a>
 </font>
 </p><p>
 <font size="+1">
-    <a href="/adm/dropadd?action=classlist">View Class List</a>
+    <a href="/adm/dropadd?action=classlist">$Text{'view'}</a>
 </font>
 </p><p>
 <font size="+1">
-    <a href="/adm/dropadd?action=drop">Drop Students</a>
+    <a href="/adm/dropadd?action=drop">$Text{'drop'}</a>
 </font>
 </p>
 END
@@ -166,6 +175,11 @@ END
 
 ###############################################################
 ###############################################################
+sub hidden_input {
+    my ($name,$value) = @_;
+    return '<input type="hidden" name="'.$name.'" value="'.$value.'" />'."\n";
+}
+
 sub print_upload_manager_header {
     my ($r,$datatoken,$distotal,$krbdefdom)=@_;
     my $javascript;
@@ -184,51 +198,72 @@ sub print_upload_manager_header {
     } else {
 	$javascript=&upload_manager_javascript_forward_associate();
     }
-    my $javascript_validations=&javascript_validations($krbdefdom);
-    $r->print(<<ENDPICK);
-<h3>Uploading Class List</h3>
-<hr>
-<h3>Identify fields</h3>
-Total number of records found in file: $distotal <hr />
-Enter as many fields as you can. The system will inform you and bring you back
-to this page if the data selected is insufficient to run your class.<hr />
-<input type="button" value="Reverse Association" onClick="javascript:this.form.associate.value='Reverse Association';submit(this.form);" />
-<input type="hidden" name="action"     value="upload" />
-<input type="hidden" name="state"      value="got_file" />
-<input type="hidden" name="associate"  value="" />
-<input type="hidden" name="datatoken"  value="$datatoken" />
-<input type="hidden" name="fileupload" value="$ENV{'form.fileupload'}" />
-<input type="hidden" name="upfiletype" value="$ENV{'form.upfiletype'}" />
-<input type="hidden" name="upfile_associate" 
-                                       value="$ENV{'form.upfile_associate'}" />
-<hr />
-<script type="text/javascript" language="Javascript">
-$javascript
-$javascript_validations
-</script>
-ENDPICK
+    my $javascript_validations=&javascript_validations('auth',$krbdefdom);
+    my $checked=(($ENV{'form.noFirstLine'})?' checked="1"':'');
+    $r->print('<h3>'.&mt('Uploading Class List')."</h3>\n".
+              "<hr>\n".
+              '<h3>'.&mt('Identify fields')."</h3>\n");
+    $r->print("<p>\n".
+              &mt('Total number of records found in file: [_1].',$distotal).
+              "\n".
+              "</p><hr>\n");
+    $r->print(&mt('Enter as many fields as you can. '.
+                  'The system will inform you and bring you back to '.
+                  'this page if the data selected is insufficient to '.
+                  'enroll students in your class.')."<hr>\n");
+    $r->print(&hidden_input('action','upload').
+              &hidden_input('state','got_file').
+              &hidden_input('associate','').
+              &hidden_input('datatoken',$datatoken).
+              &hidden_input('fileupload',$ENV{'form.fileupload'}).
+              &hidden_input('upfiletype',$ENV{'form.upfiletype'}).
+              &hidden_input('upfile_associate',$ENV{'form.upfile_associate'}));
+    $r->print('<input type="button" value="Reverse Association" '.
+              'name="'.&mt('Reverse Association').'" '.
+              'onClick="javascript:this.form.associate.value=\'Reverse Association\';submit(this.form);" />');
+    $r->print('<input type="checkbox" name="noFirstLine" $checked />'.
+              &mt('Ignore First Line'));
+    $r->print("<hr />\n".
+              '<script type="text/javascript" language="Javascript">'."\n".
+              $javascript."\n".$javascript_validations.'</script>');
 }
 
 ###############################################################
 ###############################################################
 sub javascript_validations {
-    my ($krbdefdom)=@_;
-    my %param = ( formname => 'studentform',
-                  kerb_def_dom => $krbdefdom );
-    my $authheader = &Apache::loncommon::authform_header(%param);
-    my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
-    return (<<ENDPICK);
+    my ($mode,$krbdefdom)=@_;
+    my $authheader;
+    if ($mode eq 'auth') {
+        my %param = ( formname => 'studentform',
+                      kerb_def_dom => $krbdefdom );
+        $authheader = &Apache::loncommon::authform_header(%param);
+    }
+    my %alert = &Apache::lonlocal::texthash
+        (username => 'You need to specify the username field.',
+         authen   => 'You must choose an authentication type.',
+         krb      => 'You need to specify the Kerberos domain.',
+         ipass    => 'You need to specify the initial password.',
+         name     => 'The optional name field was not specified.',
+         snum     => 'The optional student number field was not specified.',
+         section  => 'The optional section or group field was not specified.', 
+         email    => 'The optional email address field was not specified.',
+         continue => 'Continue enrollment?',
+         );
+    
+#    my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
+    my $function_name =(<<END);
 function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) {
+END
+    my $auth_checks = (<<END);
     var foundatype=0;
-    var message='';
     if (founduname==0) {
-	alert('You need to specify the username field');
+	alert('$alert{'username'}');
         return;
     }
     // alert('current.radiovalue = '+current.radiovalue);
     if (current.radiovalue == null || current.radiovalue == 'nochange') {
         // They did not check any of the login radiobuttons.
-        alert('You must choose an authentication type');
+        alert('$alert{'authen'}');
         return;
     }
     foundatype=1;
@@ -236,11 +271,11 @@ function verify_message (vf,founduname,f
         var alertmsg = '';
         switch (current.value) {
             case 'krb': 
-                alertmsg = 'You need to specify the Kerberos domain';
+                alertmsg = '$alert{'krb'}';
                 break;
             case 'loc':
             case 'fsys':
-                alertmsg = 'You need to specify the initial password';
+                alertmsg = '$alert{'ipass'}';
                 break;
             case 'fsys':
                 alertmsg = '';
@@ -253,56 +288,52 @@ function verify_message (vf,founduname,f
             return;
         }
     }
-
-    if (foundname==0) { message='name fields'; }
-    if (foundid==0) { if (message!='') { message+=', '; } message+='student number field'; }
-    if (foundsec==0) {  if (message!='') { message+=', '; } message+='section or group field'; }
-    if (foundemail==0) {  if (message!='') { message+=', '; } message+='email address field'; }
-    if (message!='') {
-       message='Not specified (optional): '+message+'.  Continue enrollment?';
-       if (confirm(message)) {
-          vf.state.value='enrolling';
-	  vf.submit();
-       }
-    } else {
-      vf.state.value='enrolling';
-      vf.submit();
-    }
-}
-
-$authheader
-ENDPICK
-
-}
-
-sub javascript_validations_without_auth {
-    my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
-    return (<<ENDPICK);
-function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) {
-    var foundatype=0;
+END
+    my $optional_checks = (<<END);
     var message='';
-    if (founduname==0) {
-	alert('You need to specify the username field');
-        return;
+    if (foundname==0) { 
+        message='$alert{'name'}';
+    }
+    if (foundid==0) { 
+        if (message!='') { 
+            message+='\\n'; 
+        }
+        message+='$alert{'snum'}';
+    }
+    if (foundsec==0) {
+        if (message!='') {
+            message+='\\n';
+        } 
+        message+='$alert{'section'}';
+    }
+    if (foundemail==0) {
+        if (message!='') {
+            message+='\\n';
+        }
+        message+='$alert{'email'}';
     }
-    if (foundname==0) { message='name fields'; }
-    if (foundid==0) { if (message!='') { message+=', '; } message+='student number field'; }
-    if (foundsec==0) {  if (message!='') { message+=', '; } message+='section or group field'; }
-    if (foundemail==0) {  if (message!='') { message+=', '; } message+='email address field'; }
     if (message!='') {
-       message='Not specified (optional): '+message+'.  Continue enrollment?';
-       if (confirm(message)) {
-          vf.state.value='enrolling';
-	  vf.submit();
-       }
+        message+= '\\n$alert{'continue'}';
+        if (confirm(message)) {
+            vf.state.value='enrolling';
+            vf.submit();
+        }
     } else {
-      vf.state.value='enrolling';
-      vf.submit();
+        vf.state.value='enrolling';
+        vf.submit();
     }
 }
 
-ENDPICK
-
+END
+    my $result = $function_name;
+    if ($mode eq 'auth') {
+        $result .= $auth_checks;
+    }
+    $result .= $optional_checks;
+    if ($mode eq 'auth') {
+        $result .= $authheader;
+    }
+    return $result;
 }
 
 ###############################################################
@@ -469,80 +500,86 @@ sub print_upload_manager_footer {
     my $locform = &Apache::loncommon::authform_local(%param);
     my $domform = &domain_form($defdom);
     my $date_table = &date_setting_table();
-    $r->print(<<ENDPICK);
-</table>
-<input type=hidden name=nfields value=$i>
-<input type=hidden name=keyfields value="$keyfields">
-<h3>Login Type</h3>
-<p>Note: this will not take effect if the user already exists</p>
-<p>
-$krbform
-</p>
-<p>
-$intform
-</p>
-<p>
-$locform
-</p>
-<h3>LON-CAPA Domain for Students</h3>
-LON-CAPA domain: $domform <p>
-<h3>Starting and Ending Dates</h3>
-<p>
-$date_table
-</p>
-<h3>Full Update</h3>
-<input type=checkbox name=fullup value=yes> Full update 
-(also print list of users not enrolled anymore)<p>
-<h3>ID/Student Number</h3>
-<input type=checkbox name=forceid value=yes> 
-Disable ID/Student Number Safeguard and Force Change of Conflicting IDs
-(only do if you know what you are doing)<p>
-<input type="button" onClick="javascript:verify(this.form)" value="Update Courselist" /><br />
-Note: for large courses, this operation may be time consuming.
-ENDPICK
+    my $Str = "</table>\n";
+    $Str .= &hidden_input('nfields',$i);
+    $Str .= &hidden_input('keyfields',$keyfields);
+    $Str .= '<h3>'.&mt('Login Type')."</h3>\n";
+    $Str .= "<p>\n".
+        &mt('Note: this will not take effect if the user already exists').
+        "</p><p>\n";
+    $Str .= $krbform."\n</p><p>\n".
+        $intform."\n</p><p>\n".
+        $locform."\n</p>\n";
+    $Str .= '<h3>'.&mt('LON-CAPA Domain for Students')."</h3>\n";
+    $Str .= "<p>\n".&mt('LON-CAPA domain: [_1]',$domform)."\n</p>\n";
+    $Str .= "<h3>".&mt('Starting and Ending Dates')."</h3>\n";
+    $Str .= "<p>\n".$date_table."</p>\n";
+    $Str .= "<h3>".&mt('Full Update')."</h3>\n";
+    $Str .= '<input type="checkbox" name="fullup" value="yes">'.
+        ' '.&mt('Full update (also print list of users not enrolled anymore)').
+        "</p>\n";
+    $Str .= "<h3>".&mt('Student Number')."</h3>\n";
+    $Str .= "<p>\n".'<input type="checkbox" name="forceid" value="yes">';
+    $Str .= &mt('Disable ID/Student Number Safeguard and Force Change '.
+                'of Conflicting IDs (only do if you know what you are doing)').
+                "\n</p><p>\n";
+    $Str .= '<input type="button" onClick="javascript:verify(this.form)" '.
+        'value="Update Courselist" />'."<br />\n";
+    $Str .= &mt('Note: for large courses, this operation may be time '.
+                'consuming');
+    $r->print($Str);
+    return;
 }
 
-# ======================================================= Menu Phase Two Upload
+###############################################################
+###############################################################
 sub print_upload_manager_form {
     my $r=shift;
-
+    my $firstLine;
     my $datatoken;
     if (!$ENV{'form.datatoken'}) {
-      $datatoken=&Apache::loncommon::upfile_store($r);
+        $datatoken=&Apache::loncommon::upfile_store($r);
     } else {
-      $datatoken=$ENV{'form.datatoken'};
-      &Apache::loncommon::load_tmp_file($r);
+        $datatoken=$ENV{'form.datatoken'};
+        &Apache::loncommon::load_tmp_file($r);
     }
     my @records=&Apache::loncommon::upfile_record_sep();
+    if($ENV{'form.noFirstLine'}){
+        $firstLine=shift(@records);
+    }
     my $total=$#records;
     my $distotal=$total+1;
     my $today=time;
     my $halfyear=$today+15552000;
-    my $defdom=$r->dir_config('lonDefDomain');
+    my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
     my ($krbdef,$krbdefdom) =
         &Apache::loncommon::get_kerberos_defaults($defdom);
     &print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom);
     my $i;
     my $keyfields;
     if ($total>=0) {
-	my @d=(['username','Username'],
-               ['names','Last Name, First Names'],
-	       ['fname','First Name'],
-               ['mname','Middle Names/Initials'],
-	       ['lname','Last Name'],
-               ['gen','Generation'],
-	       ['id','ID/Student Number'],
-               ['sec','Group/Section'],
-	       ['ipwd','Initial Password'],
-               ['email','EMail Address']);
+        my @field=(['username',&mt('Username')],
+                   ['names',&mt('Last Name, First Names')],
+                   ['fname',&mt('First Name')],
+                   ['mname',&mt('Middle Names/Initials')],
+                   ['lname',&mt('Last Name')],
+                   ['gen',&mt('Generation')],
+                   ['id',&mt('ID/Student Number')],
+                   ['sec',&mt('Group/Section')],
+                   ['ipwd',&mt('Initial Password')],
+                   ['email',&mt('EMail Address')]);
 	if ($ENV{'form.upfile_associate'} eq 'reverse') {	
 	    &Apache::loncommon::csv_print_samples($r,\@records);
-	    $i=&Apache::loncommon::csv_print_select_table($r,\@records,\@d);
-	    foreach (@d) { $keyfields.=$_->[0].','; }
+	    $i=&Apache::loncommon::csv_print_select_table($r,\@records,
+                                                          \@field);
+	    foreach (@field) { 
+                $keyfields.=$_->[0].','; 
+            }
 	    chop($keyfields);
 	} else {
-	    unshift(@d,['none','']);
-	    $i=&Apache::loncommon::csv_samples_select_table($r,\@records,\@d);
+	    unshift(@field,['none','']);
+	    $i=&Apache::loncommon::csv_samples_select_table($r,\@records,
+                                                            \@field);
 	    my %sone=&Apache::loncommon::record_sep($records[0]);
 	    $keyfields=join(',',sort(keys(%sone)));
 	}
@@ -550,7 +587,8 @@ sub print_upload_manager_form {
     &print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear);
 }
 
-# ======================================================= Enroll single student
+###############################################################
+###############################################################
 sub enroll_single_student {
     my $r=shift;
     # Remove non alphanumeric values from section
@@ -720,7 +758,7 @@ sub make_dates_default {
 sub get_student_username_domain_form {
     my $r = shift;
     my $domform = &Apache::loncommon::select_dom_form
-        ($r->dir_config('lonDefDomain'),'cudomain',0);
+        ($ENV{'course.'.$ENV{'request.course.id'}.'.domain'},'cudomain',0);
     $r->print(<<END);
 <input type="hidden" name="action" value="enrollstudent" />
 <input type="hidden" name="state"  value="gotusername" />
@@ -751,16 +789,15 @@ sub print_enroll_single_student_form {
     if ($home ne 'no_host') {
         $new_user = 0;
     }
-    &Apache::lonnet::logthis('home = '.$home);
     #
     my $user_data_html = '';
     my $javascript_validations = '';
     if ($new_user) {
-        my $defdom=$r->dir_config('lonDefDomain');
+        my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
         # Set up authentication forms
         my ($krbdef,$krbdefdom) =
             &Apache::loncommon::get_kerberos_defaults($domain);
-        $javascript_validations=&javascript_validations($krbdefdom);
+        $javascript_validations=&javascript_validations('auth',$krbdefdom);
         my %param = ( formname => 'document.studentform',
                       kerb_def_dom => $krbdefdom,
                       kerb_def_auth => $krbdef
@@ -809,7 +846,7 @@ END
     } else {
         # User already exists.  Do not worry about authentication
         my %uenv = &Apache::lonnet::dump('environment',$domain,$username);
-        $javascript_validations = &javascript_validations_without_auth();
+        $javascript_validations = &javascript_validations('noauth');
         $user_data_html = <<END;
 <h3>User Data for $username\@$domain</h3>
 <input type="hidden" name="lcserver" value="default" />
@@ -1146,6 +1183,11 @@ sub print_modify_student_form {
     }
     # determine the students starting and ending times and section
     my ($starttime,$endtime,$section) = &get_enrollment_data($sname,$sdom);
+    if ($starttime =~ /^error/) {
+        $r->print('<h2>Error</h2>');
+        $r->print('<p>'.$starttime.'</p>');
+        return;
+    }
     # Deal with date forms
     my $date_table = &date_setting_table($starttime,$endtime);
     #
@@ -1345,7 +1387,7 @@ sub get_enrollment_data {
     my %roles = &Apache::lonnet::dump('roles',$sdomain,$sname);
     my ($tmp) = keys(%roles);
     # Bail out if we were unable to get the students roles
-    return "666" if ($tmp =~ /^(con_lost|error|no_such_host)/i);
+    return ('error'.$tmp) if ($tmp =~ /^(con_lost|error|no_such_host)/i);
     # Go through the roles looking for enrollment in this course
     my ($end,$start) = (undef,undef);
     my $section = '';
@@ -1513,26 +1555,25 @@ END
 #
 sub print_first_courselist_upload_form {
     my $r=shift;
-    my $upfile_select=&Apache::loncommon::upfile_select_html();
-    my $create_classlist_help = 
-	&Apache::loncommon::help_open_topic("Course_Create_Class_List",
-           "How do I create a class list from a spreadsheet");
-    my $create_csv_help =
-	&Apache::loncommon::help_open_topic("Course_Convert_To_CSV",
-           "How do I create a CSV file from a spreadsheet");
-    $r->print(<<ENDUPFORM);
-<input type=hidden name=phase value=two>
-<h3>Upload a courselist</h3>
-$upfile_select
-<p>
-<input type=submit name="fileupload" value="Upload Courselist">
-<input type="hidden" name="action" value="upload" />
-<input type="hidden" name="state"  value="got_file" />
-</p>
-$create_classlist_help <br />
-$create_csv_help
-</body></html>
-ENDUPFORM
+    my $str;
+    $str  = '<input type="hidden" name="phase" value="two">';
+    $str .= '<input type="hidden" name="action" value="upload" />';
+    $str .= '<input type="hidden"   name="state"  value="got_file" />';
+    $str .= "<h3>".&mt('Upload a class list')."</h3>\n";
+    $str .= &Apache::loncommon::upfile_select_html();
+    $str .= "<p>\n";
+    $str .= '<input type="submit" name="fileupload" value="'.
+        &mt('Upload class list').'">'."\n";
+    $str .= '<input type="checkbox" name="noFirstLine" /> '.
+        &mt('Ignore First Line')."</p>\n";
+    $str .= &Apache::loncommon::help_open_topic("Course_Create_Class_List",
+                         "How do I create a class list from a spreadsheet").
+                             "<br />\n";
+    $str .= &Apache::loncommon::help_open_topic("Course_Convert_To_CSV",
+                           "How do I create a CSV file from a spreadsheet").
+                               "<br />\n";
+    $str .= "</body>\n</html>\n";
+    $r->print($str);
     return;
 }
 
@@ -1541,6 +1582,7 @@ sub upfile_drop_add {
     my $r=shift;
     &Apache::loncommon::load_tmp_file($r);
     my @studentdata=&Apache::loncommon::upfile_record_sep();
+    if($ENV{'form.noFirstLine'}){shift(@studentdata);}
     my @keyfields = split(/\,/,$ENV{'form.keyfields'});
     my $cid = $ENV{'request.course.id'};
     my %fields=();
@@ -1566,8 +1608,9 @@ sub upfile_drop_add {
     } else {
         my %home_servers = &Apache::loncommon::get_library_servers($domain);
         if (! exists($home_servers{$desiredhost})) {
-            $r->print('<font color="#ff0000">Error:</font>'.
-                      'Invalid home server specified');
+            $r->print('<font color="#ff0000">'.&mt('Error').'</font>'.
+                      &mt('Invalid home server specified'));
+            $r->print("</body>\n</html>\n");
             return;
         }
     }
@@ -1592,8 +1635,8 @@ sub upfile_drop_add {
     if ($amode =~ /^krb/) {
         if (! defined($genpwd) || $genpwd eq '') {
             $r->print('<font color="red" size="+1">'.
-                      'Unable to enroll students:'.'</font>  '.
-                      'No Kerberos domain was specified.</p>');
+                      &mt('Unable to enroll students').'</font>  '.
+                      &mt('No Kerberos domain was specified.').'</p>');
             $amode = ''; # This causes the loop below to be skipped
         }
     }
@@ -1601,7 +1644,7 @@ sub upfile_drop_add {
         #######################################
         ##         Enroll Students           ##
         #######################################
-        $r->print('<h3>Enrolling Students</h3>'."\n".'<p>');
+        $r->print('<h3>'.&mt('Enrolling Students')."</h3>\n<p>\n");
         my $count=0;
         my $flushc=0;
         my %student=();
@@ -1630,9 +1673,10 @@ sub upfile_drop_add {
                     }
                 }
                 if ($entries{$fields{'username'}}=~/\W/) {
-                    $r->print('<br /><b>Unacceptable username: '.
-                              $entries{$fields{'username'}}.' for user '.
-                              $fname.' '.$mname.' '.$lname.' '.$gen.'</b>');
+                    $r->print('<br />'.
+      &mt('<b>[_1]</b>: Unacceptable username for user [_2] [_3] [_4] [_5]',
+          $entries{$fields{'username'}},$fname,$mname,$lname,$gen).
+                              '</b>');
                 } else {
                     # determine section number
                     my $sec='';
@@ -1676,7 +1720,7 @@ sub upfile_drop_add {
                              \$lname,\$gen,\$sec) {
                         $$_ =~ s/(\s+$|^\s+)//g;
                     }
-                    if ($password) {
+                    if ($password || $ENV{'form.login'} eq 'loc') {
                         &modifystudent($domain,$username,$cid,$sec,
                                        $desiredhost);
                         my $reply=&Apache::lonnet::modifystudent
@@ -1686,8 +1730,8 @@ sub upfile_drop_add {
                              $email);
                         if ($reply ne 'ok') {
                             $reply =~ s/^error://;
-                            $r->print('<br /><b>'.$username.'</b>:'.
-                                      '  Unable to enroll: '.$reply);
+                            $r->print('<br />'.
+                &mt('<b>[_1]</b>:  Unable to enroll: [_2]',$username,$reply));
          		} else {
                             $count++; $flushc++;
                             $student{$username}=1;
@@ -1698,24 +1742,28 @@ sub upfile_drop_add {
                             }
                         }
                     } else {
-                        $r->print('<br /><b>'.$username.'</b>:'.
-                           '  Unable to enroll: No password specified.');
+                        $r->print('<br />'.
+      &mt('<b>[_1]</b>: Unable to enroll.  No password specified.',$username)
+                                  );
                     }
                 }
             }
         } # end of foreach (@studentdata)
-        $r->print('</p><p>Processed Students: '.$count.'</p>');
-        $r->print("<p>If active, the new role will be available when the ".
-                  "students next log in to LON-CAPA.</p>");
+        $r->print("</p>\n<p>\n".&mt('Processed [_1] student(s).',$count).
+                  "</p>\n");
+        $r->print("<p>\n".
+                  &mt('If active, the new role will be available when the '.
+                  'students next log in to LON-CAPA.')."</p>\n");
         #####################################
         #           Drop students           #
         #####################################
         if ($ENV{'form.fullup'} eq 'yes') {
-            $r->print('<h3>Dropping Students</h3>');
+            $r->print('<h3>'.&mt('Dropping Students')."</h3>\n");
             #  Get current classlist
             my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();
             if (! defined($classlist)) {
-                $r->print("There are no students currently enrolled.\n");
+                $r->print(&mt('There are no students currently enrolled.').
+                          "\n");
             } else {
                 # Remove the students we just added from the list of students.
                 foreach (@studentdata) {
@@ -1748,15 +1796,16 @@ sub drop_student_list {
         # drop student
         my $result = &modifystudent($udom,$uname,$ENV{'request.course.id'});
         if ($result eq 'ok' || $result eq 'ok:') {
-            $r->print('Dropped '.$uname.' @ '.$udom.'<br>');
+            $r->print(&mt('Dropped [_1]',$uname.'@'.$udom).'<br>');
             $count++;
         } else {
-            $r->print('Error dropping '.$uname.' @ '.$udom.': '.$result.
+            $r->print(
+          &mt('Error dropping [_1]:[_2]',$uname.'@'.$udom,$result).
                       '<br />');
         }
     }
-    $r->print('<p><b>Dropped '.$count.' student(s).</b>');
-    $r->print('<p>Re-enrollment will re-activate data.') if ($count);
+    $r->print('<p><b>'.&mt('Dropped [_1] student(s).',$count).'</b></p>');
+    $r->print('<p>'.&mt('Re-enrollment will re-activate data.')) if ($count);
 }
 
 ###################################################################
@@ -1796,7 +1845,7 @@ The response to the request is governed
 sub handler {
     my $r=shift;
     if ($r->header_only) {
-        $r->content_type('text/html');
+        &Apache::loncommon::content_type($r,'text/html');
         $r->send_http_header;
         return OK;
     }
@@ -1817,7 +1866,7 @@ sub handler {
         $r->content_type('text/csv');
     } else {
         # Start page
-        $r->content_type('text/html');
+        &Apache::loncommon::content_type($r,'text/html');
         $r->send_http_header;
         $r->print(&header());
     }