--- loncom/interface/Attic/londropadd.pm 2003/07/15 19:23:14 1.75 +++ loncom/interface/Attic/londropadd.pm 2003/11/06 20:04:06 1.88 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to drop and add students in courses # -# $Id: londropadd.pm,v 1.75 2003/07/15 19:23:14 matthew Exp $ +# $Id: londropadd.pm,v 1.88 2003/11/06 20:04:06 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(< -LON-CAPA Enrollment Manager +$title $bodytag
'Upload a class list', + 'enrollone' => 'Enroll a single student', + 'modify' => 'Modify student data', + 'view' => 'View Class List', + 'drop' => 'Drop Students'); + $r->print(< - Upload a course list + $Text{'upload'}

- Enroll a single student + $Text{'enrollone'}

- Modify student data + $Text{'modify'}

- View Classlist + $Text{'view'}

- Drop Students + $Text{'drop'}

END @@ -185,11 +194,15 @@ sub print_upload_manager_header { $javascript=&upload_manager_javascript_forward_associate(); } my $javascript_validations=&javascript_validations($krbdefdom); + my $checked=(($ENV{'form.noFirstLine'})?' checked="1"':''); + $r->print('

'.&mt('Uploading Class List')."

\n". + "
\n". + '

'.&mt('Identify fields')."

\n"); + $r->print("

\n". + &mt('Total number of records found in file: [_1].',$distotal). + "\n". + "


\n"); $r->print(<Uploading Class List -
-

Identify fields

-Total number of records found in file: $distotal
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.
@@ -198,6 +211,7 @@ to this page if the data selected is ins +Ignore First Line @@ -471,8 +485,8 @@ sub print_upload_manager_footer { my $date_table = &date_setting_table(); $r->print(< - - + +

Login Type

Note: this will not take effect if the user already exists

@@ -505,7 +519,7 @@ ENDPICK # ======================================================= 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); @@ -514,11 +528,12 @@ sub print_upload_manager_form { &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); @@ -553,6 +568,8 @@ sub print_upload_manager_form { # ======================================================= Enroll single student sub enroll_single_student { my $r=shift; + # Remove non alphanumeric values from section + $ENV{'form.csec'}=~s/\W//g; # # We do the dates first because the action of making them the defaul # in the course is entirely seperate from the action of enrolling the @@ -620,10 +637,14 @@ sub enroll_single_student { $r->print("unable to enroll: ".$login_result); } } else { - $r->print('

ERROR '. - 'Invalid login mode or password. '. - 'Unable to enroll '.$ENV{'form.cuname'}.'.

'); - } + $r->print('

ERROR '); + if ($amode =~ /^krb/) { + $r->print('Missing Kerberos domain information. '); + } else { + $r->print('Invalid login mode or password. '); + } + $r->print('Unable to enroll '.$ENV{'form.cuname'}.'.

'); + } } else { $r->print('Invalid username or domain'); } @@ -714,7 +735,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(< @@ -745,12 +766,11 @@ 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); @@ -923,7 +943,7 @@ sub print_html_classlist {

-Current Classlist +Current Class List       END if ($ENV{'form.action'} ne 'modifystudent') { @@ -1028,7 +1048,7 @@ END $excel_workbook->set_tempdir('/home/httpd/perl/tmp'); $excel_sheet = $excel_workbook->addworksheet('classlist'); # - my $description = 'Classlist for '. + my $description = 'Class List for '. $ENV{'course.'.$ENV{'request.course.id'}.'.description'}; $excel_sheet->write($row++,0,$description); # @@ -1140,6 +1160,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('

Error

'); + $r->print('

'.$starttime.'

'); + return; + } # Deal with date forms my $date_table = &date_setting_table($starttime,$endtime); # @@ -1195,6 +1220,9 @@ END sub modify_single_student { my $r = shift; # + # Remove non alphanumeric values from the section + $ENV{'form.section'} =~ s/\W//g; + # # Do the date defaults first my ($starttime,$endtime) = &get_dates_from_form(); if ($ENV{'form.makedatesdefault'}) { @@ -1336,7 +1364,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 = ''; @@ -1504,26 +1532,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(< -

Upload a courselist

-$upfile_select -

- - - -

-$create_classlist_help
-$create_csv_help - -ENDUPFORM + my $str; + $str = ''; + $str .= ''; + $str .= ''; + $str .= "

".&mt('Upload a class list')."

\n"; + $str .= &Apache::loncommon::upfile_select_html(); + $str .= "

\n"; + $str .= ''."\n"; + $str .= ' '. + &mt('Ignore First Line')."

\n"; + $str .= &Apache::loncommon::help_open_topic("Course_Create_Class_List", + "How do I create a class list from a spreadsheet"). + "
\n"; + $str .= &Apache::loncommon::help_open_topic("Course_Convert_To_CSV", + "How do I create a CSV file from a spreadsheet"). + "
\n"; + $str .= "\n\n"; + $r->print($str); return; } @@ -1532,6 +1559,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=(); @@ -1557,8 +1585,9 @@ sub upfile_drop_add { } else { my %home_servers = &Apache::loncommon::get_library_servers($domain); if (! exists($home_servers{$desiredhost})) { - $r->print('Error:'. - 'Invalid home server specified'); + $r->print(''.&mt('Error').''. + &mt('Invalid home server specified')); + $r->print("\n\n"); return; } } @@ -1580,11 +1609,19 @@ sub upfile_drop_add { $genpwd=$ENV{'form.locarg'}; } } + if ($amode =~ /^krb/) { + if (! defined($genpwd) || $genpwd eq '') { + $r->print(''. + &mt('Unable to enroll students').' '. + &mt('No Kerberos domain was specified.').'

'); + $amode = ''; # This causes the loop below to be skipped + } + } unless (($domain=~/\W/) || ($amode eq '')) { ####################################### ## Enroll Students ## ####################################### - $r->print('

Enrolling Students

'."\n".'

'); + $r->print('

'.&mt('Enrolling Students')."

\n

\n"); my $count=0; my $flushc=0; my %student=(); @@ -1613,9 +1650,10 @@ sub upfile_drop_add { } } if ($entries{$fields{'username'}}=~/\W/) { - $r->print('
Unacceptable username: '. - $entries{$fields{'username'}}.' for user '. - $fname.' '.$mname.' '.$lname.' '.$gen.''); + $r->print('
'. + &mt('[_1]: Unacceptable username for user [_2] [_3] [_4] [_5]', + $entries{$fields{'username'}},$fname,$mname,$lname,$gen). + ''); } else { # determine section number my $sec=''; @@ -1625,6 +1663,8 @@ sub upfile_drop_add { $sec=$entries{$fields{'sec'}}; } } + # remove non alphanumeric values from section + $sec =~ s/\W//g; # determine student id number my $id=''; if (defined($fields{'id'})) { @@ -1657,7 +1697,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 @@ -1667,8 +1707,8 @@ sub upfile_drop_add { $email); if ($reply ne 'ok') { $reply =~ s/^error://; - $r->print('
'.$username.':'. - ' Unable to enroll: '.$reply); + $r->print('
'. + &mt('[_1]: Unable to enroll: [_2]',$username,$reply)); } else { $count++; $flushc++; $student{$username}=1; @@ -1679,24 +1719,28 @@ sub upfile_drop_add { } } } else { - $r->print('
'.$username.':'. - ' Unable to enroll: No password specified.'); + $r->print('
'. + &mt('[_1]: Unable to enroll. No password specified.',$username) + ); } } } } # end of foreach (@studentdata) - $r->print('

Processed Students: '.$count.'

'); - $r->print("

If active, the new role will be available when the ". - "students next log in to LON-CAPA.

"); + $r->print("

\n

\n".&mt('Processed [_1] student(s).',$count). + "

\n"); + $r->print("

\n". + &mt('If active, the new role will be available when the '. + 'students next log in to LON-CAPA.')."

\n"); ##################################### # Drop students # ##################################### if ($ENV{'form.fullup'} eq 'yes') { - $r->print('

Dropping Students

'); + $r->print('

'.&mt('Dropping Students')."

\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) { @@ -1729,15 +1773,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.'
'); + $r->print(&mt('Dropped [_1]',$uname.'@'.$udom).'
'); $count++; } else { - $r->print('Error dropping '.$uname.' @ '.$udom.': '.$result. + $r->print( + &mt('Error dropping [_1]:[_2]',$uname.'@'.$udom,$result). '
'); } } - $r->print('

Dropped '.$count.' student(s).'); - $r->print('

Re-enrollment will re-activate data.') if ($count); + $r->print('

'.&mt('Dropped [_1] student(s).',$count).'

'); + $r->print('

'.&mt('Re-enrollment will re-activate data.')) if ($count); } ################################################################### @@ -1777,7 +1822,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; } @@ -1798,7 +1843,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()); }