--- loncom/interface/Attic/lonspreadsheet.pm 2002/10/21 17:59:36 1.119 +++ loncom/interface/Attic/lonspreadsheet.pm 2002/10/22 13:09:49 1.120 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.119 2002/10/21 17:59:36 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.120 2002/10/22 13:09:49 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -951,25 +951,31 @@ sub calc { # sub outrowassess { # $n is the current row number - my $n=shift; + my $n=shift; + my $csv = shift; my @cols=(); if ($n) { my ($usy,$ufn)=split(/__&&&\__/,$f{'A'.$n}); if ($rowlabel{$usy}) { - $cols[0]=$rowlabel{$usy}.'
'. + $cols[0]=$rowlabel{$usy}; + if (! $csv) { + $cols[0].='
'. ''; } - $cols[0].=''; } else { $cols[0]='Export'; } @@ -1064,7 +1070,9 @@ sub setrowlabels { # ------------------------------------------------------- Calculate spreadsheet sub calcsheet { my $sheet=shift; - return $sheet->{'safe'}->reval('&calc();'); + my $result = $sheet->{'safe'}->reval('&calc();'); + %{$sheet->{'values'}} = %{$sheet->{'safe'}->varglob('sheet_values')}; + return $result; } # ---------------------------------------------------------------- Get formulas @@ -1131,7 +1139,7 @@ sub rown { $n=-1; $dataflag=1; } - foreach ($sheet->{'safe'}->reval($proc.'('.$n.')')) { + foreach ($sheet->{'safe'}->reval($proc.'('.$n.','.$ENV{'form.showcsv'}.')')) { my $bgcolor=$defaultbg.((($showf-1)/5==int(($showf-1)/5))?'99':'DD'); my ($fm,$vl)=split(/\_\_\_eq\_\_\_/,$_); if ((($vl ne '') || ($vl eq '0')) && @@ -1653,7 +1661,7 @@ sub updateclasssheet { } $existing{$f{$_}}=1; unless ((defined($currentlist{$f{$_}})) || (!$1) || - ($f{$_}=~/^(\~\~\~|\-\-\-)/)) { + ($f{$_}=~/^(~~~|---)/)) { $f{$_}='!!! Obsolete'; $changed=1; } @@ -1710,16 +1718,26 @@ sub updatestudentassesssheet { if (($uname ne $ENV{'user.name'}) || ($udom ne $ENV{'user.domain'})){ $adduserstr='&uname='.$uname.'&udom='.$udom; } - my %allassess = - ('_feedback' =>'Feedback', - '_evaluation' =>'Evaluation', - '_tutoring' =>'Tutoring', - '_discussion' =>'Discussion' - ); + my %allassess; + if (! $ENV{'form.showcsv'}) { + %allassess = + ('_feedback' =>'Feedback', + '_evaluation' =>'Evaluation', + '_tutoring' =>'Tutoring', + '_discussion' =>'Discussion' + ); + } else { + %allassess = + ('_feedback' => "Feedback", + '_evaluation' => "Evaluation", + '_tutoring' => "Tutoring", + '_discussion' => "Discussion", + ); + } while (($_,undef) = each(%bighash)) { next if ($_!~/^src\_(\d+)\.(\d+)$/); my $mapid=$1; @@ -1730,9 +1748,13 @@ sub updatestudentassesssheet { my $symb= &Apache::lonnet::declutter($bighash{'map_id_'.$mapid}). '___'.$resid.'___'.&Apache::lonnet::declutter($srcf); - $allassess{$symb}= - ''. - $bighash{'title_'.$id}.''; + if (! $ENV{'form.showcsv'}) { + $allassess{$symb}= + ''. + $bighash{'title_'.$id}.''; + } else { + $allassess{$symb}=$bighash{'title_'.$id}; + } next if ($stype ne 'assesscalc'); foreach my $key (split(/\,/, &Apache::lonnet::metadata($srcf,'keys') @@ -1780,7 +1802,7 @@ sub updatestudentassesssheet { $existing{$usy}=1; unless ((exists($sheet->{'rowlabel'}->{$usy}) && (defined($sheet->{'rowlabel'}->{$usy})) || (!$1) || - ($f{$_}=~/^(\~\~\~|\-\-\-)/))){ + ($f{$_}=~/^(~~~|---)/))){ $f{$_}='!!! Obsolete'; $changed=1; } elsif ($ufn) { @@ -2113,7 +2135,7 @@ sub forcedrecalc { if ($ENV{'form.forcerecalc'}) { return 1; } unless ($time) { return 1; } if ($stype eq 'assesscalc') { - my $map=(split(/\_\_\_/,$usymb))[0]; + my $map=(split(/___/,$usymb))[0]; if (&checkthis('::assesscalc:',$time) || &checkthis('::assesscalc:'.$map,$time) || &checkthis('::assesscalc:'.$usymb,$time) || @@ -2132,14 +2154,10 @@ sub forcedrecalc { } # ============================================================== Export handler -# -# Non-interactive call from with program -# - sub exportsheet { my ($uname,$udom,$stype,$usymb,$fn)=@_; my @exportarr=(); - if (($usymb=~/^\_(\w+)/) && (!$fn)) { + if (defined($usymb) && ($usymb=~/^\_(\w+)/) && (!$fn)) { $fn='default_'.$1; } # @@ -2148,8 +2166,8 @@ sub exportsheet { my $key=$uname.':'.$udom.':'.$stype.':'.$usymb; my $found=''; if ($oldsheets{$key}) { - foreach (split(/\_\_\_\&\_\_\_/,$oldsheets{$key})) { - my ($name,$value)=split(/\_\_\_\=\_\_\_/,$_); + foreach (split(/___&\___/,$oldsheets{$key})) { + my ($name,$value)=split(/___=___/,$_); if ($name eq $fn) { $found=$value; } @@ -2158,8 +2176,8 @@ sub exportsheet { unless ($found) { &cachedssheets($uname,$udom,&Apache::lonnet::homeserver($uname,$udom)); if ($oldsheets{$key}) { - foreach (split(/\_\_\_\&\_\_\_/,$oldsheets{$key})) { - my ($name,$value)=split(/\_\_\_\=\_\_\_/,$_); + foreach (split(/___&\___/,$oldsheets{$key})) { + my ($name,$value)=split(/___=___/,$_); if ($name eq $fn) { $found=$value; } @@ -2178,72 +2196,65 @@ sub exportsheet { # # Return what was cached # - @exportarr=split(/\_\_\_\;\_\_\_/,$found); - } else { - # - # Not cached - # - my ($sheet)=&makenewsheet($uname,$udom,$stype,$usymb); - &readsheet($sheet,$fn); - &updatesheet($sheet); - &loadrows($sheet); - &calcsheet($sheet); - @exportarr=&exportdata($sheet); - # - # Store now - # - my $cid=$ENV{'request.course.id'}; - my $current=''; - if ($stype eq 'studentcalc') { - $current=&Apache::lonnet::reply('get:'. - $ENV{'course.'.$cid.'.domain'}.':'. - $ENV{'course.'.$cid.'.num'}. - ':nohist_calculatedsheets:'. - &Apache::lonnet::escape($key), - $ENV{'course.'.$cid.'.home'}); - } else { - $current=&Apache::lonnet::reply('get:'.$sheet->{'udom'}.':'. - $sheet->{'uname'}. - ':nohist_calculatedsheets_'. - $ENV{'request.course.id'}.':'. - &Apache::lonnet::escape($key), - $sheet->{'uhome'}); - } - my %currentlystored=(); - unless ($current=~/^error\:/) { - foreach (split(/___&\___/,&Apache::lonnet::unescape($current))) { - my ($name,$value)=split(/___=___/,$_); - $currentlystored{$name}=$value; - } - } - $currentlystored{$fn}=join('___;___',@exportarr); - # - my $newstore=''; - foreach (keys(%currentlystored)) { - if ($newstore) { $newstore.='___&___'; } - $newstore.=$_.'___=___'.$currentlystored{$_}; - } - my $now=time; - if ($stype eq 'studentcalc') { - &Apache::lonnet::reply('put:'. - $ENV{'course.'.$cid.'.domain'}.':'. - $ENV{'course.'.$cid.'.num'}. - ':nohist_calculatedsheets:'. - &Apache::lonnet::escape($key).'='. - &Apache::lonnet::escape($newstore).'&'. - &Apache::lonnet::escape($key).'.time='.$now, - $ENV{'course.'.$cid.'.home'}); - } else { - &Apache::lonnet::reply('put:'. - $sheet->{'udom'}.':'. - $sheet->{'uname'}. - ':nohist_calculatedsheets_'. - $ENV{'request.course.id'}.':'. - &Apache::lonnet::escape($key).'='. - &Apache::lonnet::escape($newstore).'&'. - &Apache::lonnet::escape($key).'.time='.$now, - $sheet->{'uhome'}); - } + @exportarr=split(/___;___/,$found); + return @exportarr; + } + # + # Not cached + # + my ($sheet)=&makenewsheet($uname,$udom,$stype,$usymb); + &readsheet($sheet,$fn); + &updatesheet($sheet); + &loadrows($sheet); + &calcsheet($sheet); + @exportarr=&exportdata($sheet); + # + # Store now + # + my $cid=$ENV{'request.course.id'}; + my $current=''; + if ($stype eq 'studentcalc') { + $current=&Apache::lonnet::reply('get:'. + $ENV{'course.'.$cid.'.domain'}.':'. + $ENV{'course.'.$cid.'.num'}. + ':nohist_calculatedsheets:'. + &Apache::lonnet::escape($key), + $ENV{'course.'.$cid.'.home'}); + } else { + $current=&Apache::lonnet::reply('get:'.$sheet->{'udom'}.':'. + $sheet->{'uname'}. + ':nohist_calculatedsheets_'. + $ENV{'request.course.id'}.':'. + &Apache::lonnet::escape($key), + $sheet->{'uhome'}); + } + my %currentlystored=(); + unless ($current=~/^error\:/) { + foreach (split(/___&\___/,&Apache::lonnet::unescape($current))) { + my ($name,$value)=split(/___=___/,$_); + $currentlystored{$name}=$value; + } + } + $currentlystored{$fn}=join('___;___',@exportarr); + # + my $newstore=''; + foreach (keys(%currentlystored)) { + if ($newstore) { $newstore.='___&___'; } + $newstore.=$_.'___=___'.$currentlystored{$_}; + } + my $now=time; + if ($stype eq 'studentcalc') { + &Apache::lonnet::put('nohist_calculatedsheets', + { $key => $newstore, + $key.time => $now }, + $ENV{'course.'.$cid.'.domain'}, + $ENV{'course.'.$cid.'.num'}) + } else { + &Apache::lonnet::put('nohist_calculatedsheets_'.$sheet->{'cid'}, + { $key => $newstore, + $key.time => $now }, + $sheet->{'udom'}, + $sheet->{'uname'}) } return @exportarr; } @@ -2451,7 +2462,7 @@ ENDSCRIPT &readsheet($sheet,$ENV{'form.ufn'}); } # Print out user information - unless ($sheet->{'sheettype'} eq 'classcalc') { + if ($sheet->{'sheettype'} ne 'classcalc') { $r->print('

User: '.$sheet->{'uname'}. '
Domain: '.$sheet->{'udom'}); $r->print('
Section/Group: '.$sheet->{'csec'}); @@ -2564,7 +2575,7 @@ ENDSCRIPT $r->print('
Show rows with empty A column: '); } else { $r->print('
Show empty rows: '); - } + } # $r->print(&hiddenfield('userselhidden','true'). 'print('>'); + # + # CSV format checkbox (classcalc sheets only) + $r->print(' Output CSV format: print(' checked') if ($ENV{'form.showcsv'}); + $r->print('>'); if ($sheet->{'sheettype'} eq 'classcalc') { - # - # CSV format checkbox (classcalc sheets only) - $r->print(' Output CSV format: print(' checked'); } - $r->print('>'); - # - # Buttons to insert rows $r->print(' Student Status: '. &Apache::lonhtmlcommon::StatusOptions ($ENV{'form.Status'},'sheet')); } + # + # Buttons to insert rows $r->print(<