--- loncom/interface/Attic/lonspreadsheet.pm 2003/01/30 18:37:49 1.166 +++ loncom/interface/Attic/lonspreadsheet.pm 2003/03/10 20:21:45 1.176 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.166 2003/01/30 18:37:49 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.176 2003/03/10 20:21:45 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -183,10 +183,7 @@ sub handler { # Header.... # $r->print('LON-CAPA Spreadsheet'); - my $nothing = "''"; - if ($ENV{'browser.type'} eq 'explorer') { - $nothing = "'javascript:void(0);'"; - } + my $nothing = &Apache::lonhtmlcommon::javascript_nothing(); if ($ENV{'request.role'} !~ /^st\./) { $r->print(<includedir($r->dir_config('lonIncludes')); - $sheet->tmpdir($r->dir_config('lonDaemons').'/tmp/'); # # Check user permissions if (($sheet->{'type'} eq 'classcalc' ) || @@ -524,25 +520,19 @@ my %numbertimes; # Directories # my $includedir; -my $tmpdir; sub includedir { my $self = shift; $includedir = shift; } -sub tmpdir { - my $self = shift; - $tmpdir = shift; -} - my %spreadsheets; -my %loadedcaches; +#my %loadedcaches; my %courserdatas; my %userrdatas; my %defaultsheets; my %rowlabel_cache; -my %oldsheets; +#my %oldsheets; sub complete_recalc { my $self = shift; @@ -609,7 +599,7 @@ sub cachedssheets { my ($uname,$udom) = @_; $uname = $uname || $self->{'uname'}; $udom = $udom || $self->{'udom'}; - if (! $Apache::lonspreadsheet::loadedcaches{$uname.'_'.$udom}) { + if (! exists($Apache::lonspreadsheet::loadedcaches{$uname.'_'.$udom})) { my @tmp = &Apache::lonnet::dump('nohist_calculatedsheets_'. $ENV{'request.course.id'}, $self->{'udom'}, @@ -729,8 +719,27 @@ sub parmval { # second, check map parms my $thisparm = $parmhash{$symbparm}; return $thisparm if (defined($thisparm)); + # first, check default - return &Apache::lonnet::metadata($fn,$rwhat.'.default'); + $thisparm = &Apache::lonnet::metadata($fn,$rwhat.'.default'); + return $thisparm if (defined($thisparm)); + + #Cascade Up + my $space=$what; + $space=~s/\.\w+$//; + if ($space ne '0') { + my @parts=split(/_/,$space); + my $id=pop(@parts); + my $part=join('_',@parts); + if ($part eq '') { $part='0'; } + my $newwhat=$rwhat; + $newwhat=~s/\Q$space\E/$part/; + my $partgeneral=&parmval($newwhat,$symb,$uname,$udom,$csec); + if (defined($partgeneral)) { return $partgeneral; } + } + + #nothing defined + return ''; } # @@ -1514,7 +1523,7 @@ sub expandnamed { foreach my $varname ( @vars ) { if ($varname=~/\D/) { $formula=~s/$varname/'$c{\''.$varname.'\'}'/ge; - $varname=~s/$var/\(\\w\+\)/g; + $varname=~s/$var/\([\\w:- ]\+\)/g; foreach (keys(%{$self->{'constants'}})) { if ($_=~/$varname/) { $values{$1}=1; @@ -1744,6 +1753,7 @@ sub calcsheet { $self->sett(); my $result = $self->{'safe'}->reval('&calc();'); %{$self->{'values'}} = %{$self->{'safe'}->varglob('sheet_values')}; +# $self->logthis($self->get_errorlog()); return $result; } @@ -1892,6 +1902,22 @@ sub dump_values_to_log { } $self->logthis("--------------------------------------------------------");} +## +## Yet another debugging function +## +sub dump_hash_to_log { + my $self= shift(); + my %tmp = @_; + if (@_<2) { + %tmp = %{$_[0]}; + } + $self->logthis('---------------------------- (entries end with ":"'); + while (my ($key,$val) = each (%tmp)) { + $self->logthis($key.' = '.$val.':'); + } + $self->logthis('---------------------------- (entries end with ":"'); +} + ################################ ## Helper functions ## ################################ @@ -1950,7 +1976,7 @@ sub rowlabels { $self->{'rowlabel'}=$rowlabel; return; } else { - return %{$self->{'rowlabel'}} if (defined($self->{'rowlabels'})); + return %{$self->{'rowlabel'}} if (defined($self->{'rowlabel'})); } } @@ -2540,6 +2566,7 @@ sub export_sheet_as_excel { } next if ($row_is_empty); } + $worksheet->write($rows_output,$cols_output++,$rownum); $worksheet->write($rows_output,$cols_output++,$label); if (ref($label)) { $cols_output = (scalar(@$label)); @@ -2664,9 +2691,10 @@ sub readsheet { # $fn now has a value $self->{'filename'} = $fn; # see if sheet is cached - my $fstring=''; - if ($fstring=$spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn}) { - my %tmp = split(/___;___/,$fstring); + if (exists($spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn})) { + + my %tmp = split(/___;___/, + $spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn}); $self->formulas(\%tmp); } else { # Not cached, need to read @@ -2775,7 +2803,7 @@ sub tmpwrite { $ENV{'user.domain'}.'_spreadsheet_'.$self->{'usymb'}.'_'. $self->{'filename'}; $fn=~s/\W/\_/g; - $fn=$tmpdir.$fn.'.tmp'; + $fn=$Apache::lonnet::tmpdir.$fn.'.tmp'; my $fh; if ($fh=Apache::File->new('>'.$fn)) { my %f = $self->formulas(); @@ -2794,7 +2822,7 @@ sub tmpread { $ENV{'user.domain'}.'_spreadsheet_'.$self->{'usymb'}.'_'. $self->{'filename'}; $fn=~s/\W/\_/g; - $fn=$tmpdir.$fn.'.tmp'; + $fn=$Apache::lonnet::tmpdir.$fn.'.tmp'; my $fh; my %fo=(); my $countrows=0; @@ -2978,8 +3006,9 @@ sub get_student_rowlabels { $self->{'rowlabel'} = {}; # my $identifier =$self->{'coursefilename'}.'_'.$stype; - if ($rowlabel_cache{$identifier}) { - %{$self->{'rowlabel'}}=split(/___;___/,$rowlabel_cache{$identifier}); + if (exists($rowlabel_cache{$identifier})) { + my %tmp = split(/___;___/,$rowlabel_cache{$identifier}); + $self->rowlabels(\%tmp); } else { # Get the data and store it in the cache # Tie hash @@ -3031,8 +3060,9 @@ sub get_assess_rowlabels { $self->rowlabels({}); my $identifier =$self->{'coursefilename'}.'_'.$stype.'_'.$usymb; # - if ($rowlabel_cache{$identifier}) { - $self->rowlabels(split(/___;___/,$rowlabel_cache{$identifier})); + if (exists($rowlabel_cache{$identifier})) { + my %tmp = split('___;___',$rowlabel_cache{$identifier}); + $self->rowlabels(\%tmp); } else { # Get the data and store it in the cache # Tie hash @@ -3076,9 +3106,8 @@ sub get_assess_rowlabels { untie(%course_db); # Store away the results $self->rowlabels(\%parameter_labels); - $rowlabel_cache{$identifier}=join('___;___',$self->rowlabels()); + $rowlabel_cache{$identifier}=join('___;___',%parameter_labels); } - } sub updatestudentassesssheet { @@ -3129,14 +3158,17 @@ sub loadstudent{ my %formulas = $self->formulas(); $cachedassess = $self->{'uname'}.':'.$self->{'udom'}; # Get ALL the student preformance data - my @tmp = &Apache::lonnet::currentdump($self->{'cid'}, - $self->{'udom'}, - $self->{'uname'}); + my @tmp = &Apache::loncoursedata::get_current_state($self->{'uname'}, + $self->{'udom'}, + undef, + $self->{'cid'}); if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:/)) { %cachedstores = @tmp; } undef @tmp; - # + # debugging code + # $self->dump_hash_to_log(\%cachedstores); + # my @assessdata=(); foreach my $row ($self->rows()) { my $cell = 'A'.$row; @@ -3169,7 +3201,7 @@ sub loadstudent{ $self->constants(\%constants); } -# --------------------------------------------------- Load data for one student +# --------------------------------------------------- Load Course Sheet # sub loadcourse { my $self = shift; @@ -3182,20 +3214,14 @@ sub loadcourse { foreach ($self->rows()) { $total++ if ($formulas{'A'.$_} !~ /^[!~-]/); } - my $now=0; - my $since=time; - $r->print(< - popwin=open('','popwin','width=400,height=100'); - popwin.document.writeln(''+ - '

Spreadsheet Calculation Progress

'+ - '
'+ - '
'+ - ''); - popwin.document.close(); - -ENDPOP - $r->rflush(); + + my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r, + 'Spreadsheet Status','Spreadsheet Calculation Progress', $total); + &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state, + 'Processing Course Assessment Data'); + + # It would be nice to load in the classlist and assessment info at this + # point, before attacking the student spreadsheets. foreach my $row ($self->rows()) { if(defined($c) && ($c->aborted())) { last; @@ -3207,12 +3233,8 @@ ENDPOP my @studentdata=$self->exportsheet($sname,$sdom,'studentcalc', undef,undef,$r); undef %userrdatas; - $now++; - $r->print(''); - $r->rflush(); - # + &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, + 'last student'); my $index=0; foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z') { @@ -3232,8 +3254,7 @@ ENDPOP } $self->formulas(\%formulas); $self->constants(\%constants); - $r->print(''); - $r->rflush(); + &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); } # ------------------------------------------------ Load data for one assessment