--- loncom/interface/Attic/lonspreadsheet.pm 2002/10/21 17:59:36 1.119
+++ loncom/interface/Attic/lonspreadsheet.pm 2002/10/22 13:13:15 1.121
@@ -1,5 +1,5 @@
#
-# $Id: lonspreadsheet.pm,v 1.119 2002/10/21 17:59:36 matthew Exp $
+# $Id: lonspreadsheet.pm,v 1.121 2002/10/22 13:13:15 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';
}
@@ -1003,15 +1009,6 @@ sub outrow {
return @cols;
}
-sub exportrowa {
- my @exportarray=();
- 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') {
- push(@exportarray,$sheet_values{$_.'0'});
- }
- return @exportarray;
-}
-
sub templaterow {
my @cols=();
$cols[0]='Template';
@@ -1064,7 +1061,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
@@ -1083,10 +1082,14 @@ sub getfa {
# ------------------------------------------------------------- Export of A-row
sub exportdata {
my $sheet=shift;
- return $sheet->{'safe'}->reval('&exportrowa()');
+ my @exportarray=();
+ 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') {
+ push(@exportarray,$sheet->{'values'}->{$_.'0'});
+ }
+ return @exportarray;
}
-
# ========================================================== End of Spreadsheet
# =============================================================================
@@ -1131,7 +1134,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 +1656,7 @@ sub updateclasssheet {
}
$existing{$f{$_}}=1;
unless ((defined($currentlist{$f{$_}})) || (!$1) ||
- ($f{$_}=~/^(\~\~\~|\-\-\-)/)) {
+ ($f{$_}=~/^(~~~|---)/)) {
$f{$_}='!!! Obsolete';
$changed=1;
}
@@ -1710,16 +1713,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 +1743,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 +1797,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 +2130,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 +2149,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 +2161,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 +2171,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 +2191,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 +2457,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 +2570,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(<