--- loncom/interface/spreadsheet/classcalc.pm 2003/09/10 14:47:42 1.13 +++ loncom/interface/spreadsheet/classcalc.pm 2004/06/08 15:55:38 1.21 @@ -1,5 +1,5 @@ # -# $Id: classcalc.pm,v 1.13 2003/09/10 14:47:42 matthew Exp $ +# $Id: classcalc.pm,v 1.21 2004/06/08 15:55:38 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -58,6 +58,7 @@ use HTML::Entities(); use Spreadsheet::WriteExcel; use Apache::lonnet; use Time::HiRes; +use Apache::lonlocal; @Apache::classcalc::ISA = ('Apache::Spreadsheet'); @@ -84,21 +85,27 @@ sub html_header { &Apache::lonstatistics::clear_classlist_variables(); foreach (['Sections',&Apache::lonstatistics::SectionSelect('Section','multpile',3)], ['Enrollment Status',&Apache::lonhtmlcommon::StatusOptions(undef,undef,3)], - ['Output Format',&Apache::Spreadsheet::output_selector()]) { + ['Output Format',$self->output_selector()]) { my ($name,$selector) = @{$_}; - $toprow .= ''.$name.''; + $toprow .= ''.&mt($name).''; $bottomrow .= ''.$selector.''; } + my $status .= ''.&mt('Status: [_1]', + '' + ).''; + return "

\n\n". "".$toprow."\n". "".$bottomrow."\n". - "
\n

"; + "\n".$status."\n". + "

"; } sub get_title { my $self = shift; # Section info should be included - my @title = ($self->{'coursedesc'}, scalar(localtime(time)) ); + my @title = ($self->{'coursedesc'}, &Apache::lonlocal::locallocaltime(time) ); return @title; } @@ -116,6 +123,10 @@ sub parent_link { sub outsheet_html { my $self = shift; my ($r) = @_; + #################################### + # Report any calculation errors # + #################################### + $r->print($self->html_report_error()); ################################### # Determine table structure ################################### @@ -123,15 +134,27 @@ sub outsheet_html { my $exportcolor = '#BBBBFF'; my $num_uneditable = 26; my $num_left = 52-$num_uneditable; + # + my %header=&Apache::lonlocal::texthash( + 'course' => 'Course', + 'import' => 'Import', + 'calculations' => 'Calculations', + 'student' => 'Student', + 'status' => 'Status', + 'username' => 'Username', + 'domain' => 'Domain', + 'section' => 'Section', + 'row' => 'Row', + ); my $tableheader =<<"END";

- + + $header{'import'} + $header{'calculations'} END my $label_num = 0; @@ -149,21 +172,24 @@ END $r->print($tableheader); # # Print out template row - $r->print(''. + $r->print(''. $self->html_template_row($num_uneditable,$importcolor). "\n"); # # Print out summary/export row - $r->print(''. + $r->print(''. $self->html_export_row($exportcolor)."\n"); # # Prepare to output rows $tableheader =<<"END";

Course$header{'course'} - Import - Calculations
Template 
'.&mt('Template').' 
Summary0
'.&mt('Summary').'0
- - - + + + + + + END foreach (split(//,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')){ if ($label_num<$num_uneditable) { @@ -206,8 +232,8 @@ sub excel_rows { # # Write a header row $cols_output = 0; - foreach my $value ('fullname','username','domain','section','status','id') { - $worksheet->write($rows_output,$cols_output++,$value); + foreach my $value ('Fullname','Username','Domain','Section','Status','ID') { + $worksheet->write($rows_output,$cols_output++,&mt($value)); } $rows_output++; # @@ -236,9 +262,8 @@ sub csv_rows { my ($connection,$filehandle) = @_; # # Write a header row - $self->csv_output_row($filehandle,undef, - ('fullname','username','domain','section','status','id')); + (&mt('Fullname'),&mt('Username'),&mt('Domain'),&mt('Section'),&mt('Status'),&mt('ID'))); # # Write each students row foreach my $student (@Students) { @@ -256,10 +281,108 @@ sub csv_rows { return; } +sub output_options { + my $self = shift(); + return ({value => 'htmlclasslist', + description => 'Student Sheet Links'}, + {value => 'html', + description => 'HTML'}, + {value => 'excel', + description => 'Excel'}, + {value => 'csv', + description => 'Comma Separated Values'}, +# {value => 'xml', +# description => 'XML'}, + ); +} + sub outsheet_recursive_excel { my $self = shift; my ($r) = @_; -} +} + +sub outsheet_htmlclasslist { + my $self = shift; + my ($r) = @_; + # + # Determine if we should output expire caches links... + my $show_expire_link = 0; + if (exists($ENV{'user.role.dc./'.$ENV{'request.role.domain'}.'/'})){ + $show_expire_link = 1; + } + # + if ($show_expire_link) { + $r->print(''. + &mt('Expire all student spreadsheets').''.$/); + } + # + $r->print('

'. + &mt('Click on a student to be taken to their spreadsheet'). + '

'); + # + my %header=&Apache::lonlocal::texthash( + 'student' => 'Student', + 'status' => 'Status', + 'username' => 'Username', + 'domain' => 'Domain', + 'section' => 'Section', + ); + # + # Prepare to output rows + my $tableheader =<<"END"; +

+

Rowstudentusernamedomainsectionstatus
$header{'row'}$header{'student'}$header{'username'}$header{'domain'}$header{'section'}$header{'status'}
+ + + + + + + +END + if ($show_expire_link) { + $tableheader.= ''; + } + $tableheader.= "\n"; + # + my $num_output = 0; + foreach my $student (@Students) { + if ($num_output++ % 50 == 0) { + $r->print("
$header{'student'}$header{'username'}$header{'domain'}$header{'section'}$header{'status'} 
\n".$tableheader); + } + my $link = ''; + $student->{'section'} = 'none' if ($student->{'section'} eq '-1'); + $r->print(''. + ''.$num_output.''. + ''.$link.$student->{'fullname'}.''. + ''.$link.$student->{'username'}.''. + ''.$student->{'domain'} .''. + ''.$student->{'section'} .''. + ''.$student->{'status'} .''); + if ($show_expire_link) { + $r->print(''. + 'Expire Record'.$/); + } + $r->print("\n"); + } + $r->print("

\n"); + return; +} + +sub update_status { + my ($r,$message) = @_; + $r->print(''); + $r->rflush(); + return; +} sub compute { my $self = shift; @@ -269,14 +392,14 @@ sub compute { $self->initialize_safe_space(); my %c = $self->constants(); my %f = $self->formulas(); - my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin - ($r,'Spreadsheet Computation Status', - 'Spreadsheet Computation', scalar(@Students)); - &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state, - 'Processing course structure'); + &update_status($r,'Initializing Course Structure'); &Apache::studentcalc::initialize_package(); + my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin + ($r,&mt('Spreadsheet Computation Status'), + &mt('Spreadsheet Computation'), scalar(@Students),'inline',undef, + 'sheet','spreadsheet_status'); &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state, - 'Processing first student'); + &mt('Processing first student')); foreach my $student (@Students) { if ($connection->aborted()) { $self->cleanup(); return; } my $sname = $student->{'username'}.':'.$student->{'domain'}; @@ -284,6 +407,10 @@ sub compute { ($student->{'username'},$student->{'domain'},undef); if ($connection->aborted()) { $self->cleanup(); return; } my @exportdata = $studentsheet->export_data($r); + if ($studentsheet->badcalc()) { + $self->set_calcerror($sname.' : '. + $studentsheet->calcerror()); + } if ($connection->aborted()) { $self->cleanup(); return; } my $rownum = $self->get_row_number_from_key($sname); $f{'A'.$rownum} = $sname; @@ -301,11 +428,13 @@ sub compute { 'last student'); } &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); + &update_status($r,'Done computing student sheets'); $r->rflush(); $self->constants(\%c); $self->formulas(\%f); $self->calcsheet(); $self->save() if ($self->need_to_save()); + &update_status($r,'Done!'); } 1;