--- loncom/interface/Attic/lonspreadsheet.pm 2000/11/27 12:13:10 1.2 +++ loncom/interface/Attic/lonspreadsheet.pm 2000/12/04 19:38:35 1.3 @@ -1,16 +1,26 @@ # The LearningOnline Network with CAPA # Spreadsheet/Grades Display Handler # -# 11/11,11/15,11/27 Gerd Kortemeyer +# 11/11,11/15,11/27,12/04 Gerd Kortemeyer package Apache::lonspreadsheet; use strict; use Safe; +use Safe::Hole; use Opcode; -use vars qw(%v %t %f); use Apache::lonnet; use Apache::Constants qw(:common); +use HTML::TokeParser; + +# +# f: formulas +# t: intermediate format (from f after sett) +# v: output values (from t after calcv) +# + +use vars qw(%v %t %f); + sub deffunc { my $safeeval=shift; @@ -211,6 +221,8 @@ ENDDEFS $safeeval->reval($code); } +# --------------------------------------------------------- Initialize t from f + sub sett { %t=(); map { @@ -222,6 +234,8 @@ sub sett { } keys %f; } +# ------------------------------------------------------------ Calculate values + sub calcv { my $safeeval=shift; %v=(); @@ -247,7 +261,62 @@ sub calcv { return ''; } -sub handler { +# ------------------------------------------------------------ Read spreadsheet + +sub readf { + my $fn=shift; + %f=(); + my $content; + { + my $fh=Apache::File->new($fn); + $content=join('',<$fh>); + } + { + my $parser=HTML::TokeParser->new(\$content); + my $token; + while ($token=$parser->get_token) { + if ($token->[0] eq 'S') { + if ($token->[1] eq 'field') { + $f{$token->[2]->{'col'}.$token->[2]->{'row'}}= + $parser->get_text('/field'); + } + } + } + } +} + +# --------------------------------------------------------------- Read metadata + +sub readmeta { + my $fn=shift; + unless ($fn=~/\.meta$/) { $fn.='meta'; } + my $content; + my %returnhash=(); + { + my $fh=Apache::File->new($fn); + $content=join('',<$fh>); + } + my $parser=HTML::TokeParser->new(\$content); + my $token; + while ($token=$parser->get_token) { + if ($token->[0] eq 'S') { + my $entry=$token->[1]; + if (($entry eq 'stores') || ($entry eq 'parameter')) { + my $unikey=$entry; + $unikey.='_'.$token->[2]->{'part'}; + $unikey.='_'.$token->[2]->{'name'}; + $returnhash{$unikey}=$token->[2]->{'display'}; + } + } + } + return %returnhash; +} + + +# ------------------------------------------------------------ Returns safeeval + +sub init { + %v=(); %t=(); %f=(); @@ -260,6 +329,24 @@ sub handler { $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT'); $safeeval->share('%v','%t','%f'); &deffunc($safeeval); + + return $safeeval; +} + +# ----------------------------------------------------------------------------- + +sub handler { + + my $r=shift; + + $r->content_type('text/html'); + $r->send_http_header; + + $r->print('LON-CAPA Spreadsheet'); + $r->print(''); + + my $safeeval=init(); + $f{'A3'}=5; $f{'A4'}=3; $f{'A5'}=8; @@ -275,14 +362,17 @@ sub handler { $f{'H10'}='MEAN("E*")'; $f{'G10'}='BIN(3,5,"A*")'; &sett(); - print &calcv($safeeval)."\n"; - print $v{'C7'}."\n"; - print $t{'G5'}.' - '.$v{'G5'}."\n"; - print $t{'G6'}.' - '.$v{'G6'}."\n"; - print $t{'G7'}.' - '.$v{'G7'}."\n"; - print $t{'G8'}.' - '.$v{'G8'}."\n"; - print $t{'G9'}.' - '.$v{'G9'}."\n"; - print $t{'G10'}.' - '.$v{'G10'}."\n"; + $r->print(&calcv($safeeval)."\n"); + $r->print($v{'C7'}."\n"); + $r->print($t{'G5'}.' - '.$v{'G5'}."\n"); + $r->print($t{'G6'}.' - '.$v{'G6'}."\n"); + $r->print($t{'G7'}.' - '.$v{'G7'}."\n"); + $r->print($t{'G8'}.' - '.$v{'G8'}."\n"); + $r->print($t{'G9'}.' - '.$v{'G9'}."\n"); + $r->print($t{'G10'}.' - '.$v{'G10'}."\n"); + + $r->print(''); + return OK; } 1;