--- loncom/interface/Attic/londropadd.pm 2003/09/29 16:09:20 1.86 +++ loncom/interface/Attic/londropadd.pm 2003/12/08 23:13:17 1.93 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to drop and add students in courses # -# $Id: londropadd.pm,v 1.86 2003/09/29 16:09:20 www Exp $ +# $Id: londropadd.pm,v 1.93 2003/12/08 23:13:17 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -48,10 +48,11 @@ 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" @@ -80,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}); @@ -140,33 +141,49 @@ 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', + 'populate' => 'Automated Enrollment Manager'); + $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><p> +<font size="+1"> + <a href="/adm/populate">$Text{'populate'}</a> </font> -</p> 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; @@ -185,53 +202,83 @@ sub print_upload_manager_header { } else { $javascript=&upload_manager_javascript_forward_associate(); } - my $javascript_validations=&javascript_validations($krbdefdom); + my $javascript_validations=&javascript_validations('auth',$krbdefdom); my $checked=(($ENV{'form.noFirstLine'})?' checked="1"':''); - $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="checkbox" name="noFirstLine" $checked />Ignore First Line -<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 + $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', + my ($mode,$krbdefdom)=@_; + my $authheader; + if ($mode eq 'auth') { + my %param = ( formname => 'studentform', + kerb_def_dom => $krbdefdom ); + $authheader = &Apache::loncommon::authform_header(%param); + } elsif ($mode eq 'createcourse') { + my %param = ( formname => 'ccrs', kerb_def_dom => $krbdefdom ); - my $authheader = &Apache::loncommon::authform_header(%param); - my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); - return (<<ENDPICK); + $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=''; +END + unless ($mode eq 'createcourse') { + $auth_checks .= (<<END); if (founduname==0) { - alert('You need to specify the username field'); + alert('$alert{'username'}'); return; } +END + } + $auth_checks .= (<<END); // 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; @@ -239,11 +286,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 = ''; @@ -256,56 +303,59 @@ 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 - +END + my $optional_checks = ''; + if ($mode eq 'createcourse') { + $optional_checks = (<<END); + vf.submit(); } - -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 + } else { + $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') || ($mode eq 'createcourse') ) { + $result .= $auth_checks; + } + $result .= $optional_checks; + if ( ($mode eq 'auth') || ($mode eq 'createcourse') ) { + $result .= $authheader; + } + return $result; } ############################################################### @@ -472,52 +522,53 @@ 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);} + if($ENV{'form.noFirstLine'}){ + $firstLine=shift(@records); + } my $total=$#records; my $distotal=$total+1; my $today=time; @@ -529,24 +580,28 @@ sub print_upload_manager_form { 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))); } @@ -554,7 +609,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 @@ -640,21 +696,25 @@ sub enroll_single_student { } sub setup_date_selectors { - my ($starttime,$endtime) = @_; + my ($starttime,$endtime,$mode) = @_; if (! defined($starttime)) { $starttime = time; - if (exists($ENV{'course.'.$ENV{'request.course.id'}. + unless ($mode eq 'createcourse') { + if (exists($ENV{'course.'.$ENV{'request.course.id'}. '.default_enrollment_start_date'})) { - $starttime = $ENV{'course.'.$ENV{'request.course.id'}. + $starttime = $ENV{'course.'.$ENV{'request.course.id'}. '.default_enrollment_start_date'}; + } } } if (! defined($endtime)) { $endtime = time+(6*30*24*60*60); # 6 months from now, approx - if (exists($ENV{'course.'.$ENV{'request.course.id'}. + unless ($mode eq 'createcourse') { + if (exists($ENV{'course.'.$ENV{'request.course.id'}. '.default_enrollment_end_date'})) { - $endtime = $ENV{'course.'.$ENV{'request.course.id'}. + $endtime = $ENV{'course.'.$ENV{'request.course.id'}. '.default_enrollment_end_date'}; + } } } my $startdateform = &Apache::lonhtmlcommon::date_setter('studentform', @@ -663,6 +723,14 @@ sub setup_date_selectors { my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform', 'enddate', $endtime); + if ($mode eq 'createcourse') { + $startdateform = &Apache::lonhtmlcommon::date_setter('ccrs', + 'startdate', + $starttime); + $enddateform = &Apache::lonhtmlcommon::date_setter('ccrs', + 'enddate', + $endtime); + } return ($startdateform,$enddateform); } @@ -676,11 +744,14 @@ sub get_dates_from_form { } sub date_setting_table { - my ($starttime,$endtime) = @_; - my ($startform,$endform)=&setup_date_selectors($starttime,$endtime); + my ($starttime,$endtime,$mode) = @_; + my ($startform,$endform)=&setup_date_selectors($starttime,$endtime,$mode); my $dateDefault = '<nobr>'. '<input type="checkbox" name="makedatesdefault" />'. ' make these dates the default for future enrollment'; + if ($mode eq 'createcourse') { + $dateDefault = ' '; + } my $perpetual = '<nobr><input type="checkbox" name="no_end_date"'; if (defined($endtime) && $endtime == 0) { $perpetual .= ' checked'; @@ -755,7 +826,6 @@ 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 = ''; @@ -764,7 +834,7 @@ sub print_enroll_single_student_form { # 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 @@ -813,7 +883,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" /> @@ -906,7 +976,7 @@ END # ========================================================= Menu Phase Two Drop sub print_drop_menu { my $r=shift; - $r->print("<h3>Drop Students</h3>"); + $r->print("<h3>".&mt('Drop Students')."</h3>"); my $cid=$ENV{'request.course.id'}; my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist(); if (! defined($classlist)) { @@ -1025,7 +1095,7 @@ END $r->print('"'.join('","',("username","domain","ID","student name", "section","status")).'"'."\n"); } else { - $r->print('"'.join('","',("username","domain","ID","student name", + $r->print('"'.join('","',(&mt("username"),"domain","ID","student name", "section")).'"'."\n"); } } elsif ($mode eq 'excel') { @@ -1150,6 +1220,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); # @@ -1349,7 +1424,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 = ''; @@ -1447,19 +1522,23 @@ END END } else { + my $wordusername=&mt('username'); + my $worddomain=&mt('domain'); + my $wordstudentname=&mt('student name'); + my $wordsection=&mt('section'); $r->print(<<END); <table border=2> <tr><th> </th> <th> - <a href="/adm/dropadd?action=$action&sortby=username">username</a> + <a href="/adm/dropadd?action=$action&sortby=username">$wordusername</a> </th><th> - <a href="/adm/dropadd?action=$action&sortby=domain">domain</a> + <a href="/adm/dropadd?action=$action&sortby=domain">$worddomain</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> + <a href="/adm/dropadd?action=$action&sortby=fullname">$wordstudentname</a> </th><th> - <a href="/adm/dropadd?action=$action&sortby=section">section</a> + <a href="/adm/dropadd?action=$action&sortby=section">$wordsection</a> </th> </tr> END @@ -1503,11 +1582,14 @@ END END } $r->print('</table><br>'); + my $DropStudents=&mt('Drop Students'); + my $CheckAll=&mt('check all'); + my $UncheckAll=&mt('uncheck all'); $r->print(<<"END"); </p><p> -<input type="button" value="check all" onclick="javascript:checkAll(document.studentform.droplist)"> -<input type="button" value="uncheck all" onclick="javascript:uncheckAll(document.studentform.droplist)"> -<p><input type=submit value="Drop Students"></p> +<input type="button" value="$CheckAll" onclick="javascript:checkAll(document.studentform.droplist)"> +<input type="button" value="$UncheckAll" onclick="javascript:uncheckAll(document.studentform.droplist)"> +<p><input type=submit value="$DropStudents"></p> END return; } @@ -1517,27 +1599,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" /> -<input type="checkbox" name="noFirstLine" /> Ignore First Line<br /> -</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", + &mt("How do I create a class list from a spreadsheet")). + "<br />\n"; + $str .= &Apache::loncommon::help_open_topic("Course_Convert_To_CSV", + &mt("How do I create a CSV file from a spreadsheet")). + "<br />\n"; + $str .= "</body>\n</html>\n"; + $r->print($str); return; } @@ -1572,8 +1652,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; } } @@ -1598,8 +1679,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 } } @@ -1607,7 +1688,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=(); @@ -1636,9 +1717,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=''; @@ -1692,8 +1774,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; @@ -1704,24 +1786,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) { @@ -1754,15 +1840,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); } ###################################################################